2015-07-03 47 views
1

我在脚本中使用lappend元素,做这样的事情:lappend增加了大括号

set element_name a[0] 
lappend mylist $element_name 

我看到,如果$element_name包含它[]用于例如a[0]lappend增加了花括号。如果我打印$mylist那么它给出:

{a[0]} 

我该如何摆脱那些大括号?我只想要a[0]

+0

即第一行应生成一个错误,'无效命令名0',除非你写为'{A [0]}'或'“一个\ [0 \ ]'' – slebetman

+0

@slebetman:'a \ [0]'没有双引号就足够了。 –

+0

或者你有一个命令:'proc 0 {} {return {[0]}}' –

回答

1

大括号消失,如果你使用join到列表转换为字符串:

puts [join $mylist] 
# => a[0] 

,或者如果你单独打印的元素:

foreach elem $mylist {puts $elem} 

列表的字符串表示需要报价包含对解释器有重要意义的字符和/或干扰列表结构的元素。括号(在它们之间有一个脚本)通常被解释为一个命令替换,并且为了防止解释器评估它,你的元素被包裹在大括号中。一旦列表元素被转换为字符串,这就不再是一个问题,并且您存储在其中的文本不再被包装。

文档:foreachjoinputs