TCL lrange 命令为引号中的内容创建数组

问题描述 投票:0回答:1

我有以下简化代码:

set getevent [exec "show running-config | section UPDATESCRIPTS"]
set geteventsplit [split $getevent "\n"]
foreach entry $geteventsplit {
    if {[llength $entry] > 1} {
        lappend finalconfig1 [lrange $entry 0 end]
        lappend finalconfig2 $entry
    }
}
puts "Output1:"
puts $finalconfig1
puts "Output2:"
puts $finalconfig2

所以我从第一行返回的数据如下所示:

event manager applet UPDATESCRIPTS
 event timer cron cron-entry "30 1 * * *"
 action 001 cli command "enable"
 action 002 cli command "set updatescripts"

运行脚本的输出如下所示:

Output1:
{event manager applet UPDATESCRIPTS} {event timer cron cron-entry {30 1 * * *}} {action 001 cli command enable} {action 002 cli command {set updatescripts}}
Output2:
{event manager applet UPDATESCRIPTS
} { event timer cron cron-entry "30 1 * * *"
} { action 001 cli command "enable"
} { action 002 cli command "set updatescripts"
}

现在我遇到的问题是我想保留引号。所以输出1最初采用这一行:

event timer cron cron-entry "30 1 * * *"

并将其转换为:

event timer cron cron-entry {30 1 * * *}

问题:lrange命令中如何保留引号?

escaping tcl quotes curly-braces
1个回答
0
投票

您是否保留该行的文本或该行中的单词列表?它们是不同的东西!

lrange
命令不保留单字部分;当您对only行中的单词列表感兴趣时,可以使用它。

此外,您完全依赖于该子进程的输出,其对单词的解释与 Tcl 相同。即使您可以逃脱惩罚,通常也不建议这样做。还有其他方法可以获取“记录中的单词列表”,这可能更适合您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.