命令替换中的行继续

时间:2015-08-04 08:25:49

标签: tcl

给出这个简短的代码片段:

set a [list \
  foo \
  bar
]

当我\ list之后移除invalid command name "foo"时,我\移除foo invalid command name "bar" invalid command name "]"后,我获得\。< / p>

但是,我所说的代码运行正常,我没有像bar这样的内容。

{{1}}之后为什么不需要{{1}}?

2 个答案:

答案 0 :(得分:1)

[ ... ]序列的内容实际上是一个脚本,而不仅仅是一个命令(虽然人们大多不利用这个,因为他们并不疯狂)。在脚本末尾添加额外的空行不会改变脚本的结果:它是脚本中最后一个命令的结果(除非脚本是空的,当它是空字符串时)。

离开\个字符意味着那里有一个多命令脚本,这是合法的(尽管你没有创建命令foobar)。拥有它们意味着你有一个等同于:

的整体脚本
set a [list  foo  bar
]

正是那些空间。这通常与此几乎相同:

set a [list foo bar]

但不同之处在于。

答案 1 :(得分:0)

没有错误消息,因为递归评估在close括号结束。它不是命令替换脚本的一部分。就命令替换中的递归评估而言,这只是一个列表命令,后面有一些空格。