在TCL中含有括号和括号的双美元是什么意思?

时间:2014-01-27 17:29:01

标签: tcl

问题

以下一行有什么作用?

eval "set abc \$${SID}(abc)"

我的尝试

我知道$someArray(index)是如何在TCL中访问数组的。 所以

set abc $SID(abc)

希望abc成为数组SID的一个键(据我所知abc可能是任何东西,因为TCL中的所有数组都是关联的。这是正确的吗?)。然后它将值赋给abc

所以在Pseudocode中该行

Ensure: SID is array, abc exists

abc <- SID[abc]

但是为什么SID周围有大括号?为什么eval

1 个答案:

答案 0 :(得分:1)

大括号用于防止替换多于必要字符的变量。

$variableonetwo

引用名为variableonetwo的变量并返回其值:

% set variableonetwo 1
% puts $variableonetwo
1

但是...

${variableone}two

指的是名为variableone的变量和字符串two

% set variableone 1
% puts ${variableone}two
1two
% puts $variableonetwo
can't read "variableonetwo": no such variable

eval用于...评估/执行命令。

eval "set abc \$${SID}(abc)"

如果$SID的值为foo,则会尝试评估以下内容。

set abc $foo(abc)

在这里使用eval的一个好处是你可以在同一行中只有两个替换,第一个是将$SID替换为数组名称第二个来自数组值(来自提供的密钥)。