包含[数字]的tcl字符串

时间:2013-03-29 21:12:13

标签: tcl

我有一个包含[某些数字]的变量 例如:

set parse_var "Interface {} {} [1] [] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down"

当我执行$parse_var因为[1]而导致脚本中断。

  

无效的命令名称“1”       执行时   “1”

如何处理此令牌,我需要在puts语句

之后拆分parse_var

2 个答案:

答案 0 :(得分:4)

puts上没有发生该错误,它发生在set上。双引号字符串执行插值,因此它试图立即运行[1]

如果大括号在你的字符串中是平衡的,你可以用大括号替换引号,但不幸的是你在FastEther0/1之后有一个不平衡的近距离大括号。因此,您可能希望简单地使用[转义\,如下所示:

set parse_var "Interface {} {} \[1] \[]
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down"

答案 1 :(得分:1)

方括号在Tcl中具有特殊含义:它调用命令,在这种情况下命令名称为1,并返回用该命令的输出替换[...]。它被称为命令替换。为了避免这种情况,你可以:

  1. 使用大括号{...}代替引号“...”
  2. 或者,逃避,请参阅Kevin Ballard的解决方案
  3. 如果你想使用大括号:

    set parse_var {Interface {} {} [1] [] 
    FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
    unassigned {} {} {} {} {} YES unset {} administratively down down}