我有以下简化代码:
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命令中如何保留引号?
您是否保留该行的文本或该行中的单词列表?它们是不同的东西!
lrange
命令不保留单字部分;当您对only行中的单词列表感兴趣时,可以使用它。
此外,您完全依赖于该子进程的输出,其对单词的解释与 Tcl 相同。即使您可以逃脱惩罚,通常也不建议这样做。还有其他方法可以获取“记录中的单词列表”,这可能更适合您的用例。