0

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

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

当我确实$parse_var因为[1].

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

我如何处理这个令牌,我需要parse_var在 puts 语句之后拆分

4

2 回答 2

4

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

如果大括号在你的字符串中是平衡的,你可以用大括号替换引号,但不幸的是你在 . 之后有一个不平衡的右大括号FastEther0/1。因此,您可能只想用 s 转义[s \,如下所示:

set parse_var "Interface {} {} \[1] \[]
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down"
于 2013-03-29T21:22:49.617 回答
1

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

  1. 使用大括号 { ... } 而不是引号“ ...”
  2. 或者,逃避,见凯文巴拉德的解决方案

如果你想使用大括号:

set parse_var {Interface {} {} [1] [] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down}
于 2013-03-29T21:33:11.240 回答