给出这个简短的代码片段:
set a [list \
foo \
bar
]
当我\
list
之后移除invalid command name "foo"
时,我\
移除foo
invalid command name "bar"
invalid command name "]"
后,我获得\
。< / p>
但是,我所说的代码运行正常,我没有像bar
这样的内容。
{{1}}之后为什么不需要{{1}}?
答案 0 :(得分:1)
[
... ]
序列的内容实际上是一个脚本,而不仅仅是一个命令(虽然人们大多不利用这个,因为他们并不疯狂)。在脚本末尾添加额外的空行不会改变脚本的结果:它是脚本中最后一个命令的结果(除非脚本是空的,当它是空字符串时)。
离开\
个字符意味着那里有一个多命令脚本,这是合法的(尽管你没有创建命令foo
或bar
)。拥有它们意味着你有一个等同于:
set a [list foo bar
]
正是那些空间。这通常与此几乎相同:
set a [list foo bar]
但不同之处在于。
答案 1 :(得分:0)
没有错误消息,因为递归评估在close括号结束。它不是命令替换脚本的一部分。就命令替换中的递归评估而言,这只是一个列表命令,后面有一些空格。