以下一行有什么作用?
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
?
答案 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
替换为数组名称第二个来自数组值(来自提供的密钥)。