我有一个包含[某些数字]的变量 例如:
set parse_var "Interface {} {} [1] []
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down"
当我执行$parse_var
因为[1]
而导致脚本中断。
无效的命令名称“1” 执行时 “1”
如何处理此令牌,我需要在puts语句
之后拆分parse_var
答案 0 :(得分:4)
puts
上没有发生该错误,它发生在set
上。双引号字符串执行插值,因此它试图立即运行[1]
。
如果大括号在你的字符串中是平衡的,你可以用大括号替换引号,但不幸的是你在FastEther0/1
之后有一个不平衡的近距离大括号。因此,您可能希望简单地使用[
转义\
,如下所示:
set parse_var "Interface {} {} \[1] \[]
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down"
答案 1 :(得分:1)
方括号在Tcl中具有特殊含义:它调用命令,在这种情况下命令名称为1
,并返回用该命令的输出替换[...]。它被称为命令替换。为了避免这种情况,你可以:
如果你想使用大括号:
set parse_var {Interface {} {} [1] []
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down}