在数组集中使用列表变量

using list variable in array set

我正在学习TCL,发现我可以将数组初始化为(k1,v1 是一组键值)

array set a2 {k1 v1 k2 v2}

然而,当我尝试使用已经存在的列表作为

set var3 "k1 v1 k2 v2"
array set a2{$var3}

set var3 [listk1 v1 k2 v2]
array set a2{$var3}

我收到一个错误:

wrong # args: should be 'array set arrayName list"

我做错了什么?

您在数组名称和值之间缺少 space。语法是 "array set name value" 但你称它为 "array set namevalue"

array set a2 $var3

在另一个示例中,您在变量周围加上了方括号,这样可以防止变量被展开。 ${var3} 会像 $var3 一样展开,但 {$var3} 不会。

有时当命令调用出错时,将命令视为列表会有所帮助。通过这种方式,可以大致了解命令准备好执行时的样子。

list array set a2{$var3}
# -> array set {a2{k1 v1 k2 v2}}

嗯,不,这看起来不对。应该是四个字,第三个字看起来很奇怪

如果我在左大括号前加一个 space 怎么样?

list array set a2 {$var3}
# -> array set a2 {$var3}

关闭,但没有雪茄。看起来大括号正在干扰变量替换。如果我删除它们会怎样?

list array set a2 $var3
# -> array set a2 {k1 v1 k2 v2}

大家都很高兴。

通过这种方式,您可以对命令结构和引用进行试验,直到正确为止。只是一个小费。