我试图在数组中替换变量值,以便根据命令行输入更新数组值。 例如我收到IP地址作为我的TCL脚本的命令行参数,并尝试使用recvd IP值更新命令。
我的数组是:
array set myArr { 1 myCmd1("192.268.2.1","abc.txt")
2 myCmd2("192.268.2.1","xyz.txt")
3 myCmd3("192.268.2.1","klm.txt")
}
这里,“192.268.2.1
”实际上将作为命令行参数提供。
我试过
array set myArr { 1 myCmd1($myIP,"abc.txt")
2 myCmd2($myIP,"xyz.txt")
3 myCmd3($myIP,"klm.txt")
}
以及其他组合,例如${myIP}
,{[set $myIP]}
,但没有一种正在发挥作用。
提前感谢任何帮助/输入。
答案 0 :(得分:3)
使用list
命令
% set myIP 0.0.0.0
0.0.0.0
% array set myArr [list 1 myCmd1($myIP,"abc.txt") 2 myCmd2($myIP,"xyz.txt") 3 myCmd3($myIP,"klm.txt")]
% puts $myArr(1)
myCmd1(0.0.0.0,"abc.txt")
% puts $myArr(3)
myCmd3(0.0.0.0,"klm.txt")
%
答案 1 :(得分:1)
如果您不尝试在此实例中使用数组,我认为您的代码将更易于理解且更易于维护。如果你小心的话,你可以侥幸逃脱(参见与使用列表相关的答案)但是当存在更易读的解决方案时,没有理由这样做。
这是我的解决方案:
set myArr(1) "myCmd1($myIP,\"abc.txt\")"
set myArr(2) "myCmd2($myIP,\"xyz.txt\")"
set myArr(3) "myCmd3($myIP,\"klm.txt\")"
答案 2 :(得分:-1)
尝试:
array set myArr [list myCmd1($myIP, "abc.txt") 2 myCmd2($myIP, "xyz.txt") ... ]
为什么呢?因为当您在Tcl中编写{$var}
时,它意味着$var
而不是变量var
的内容。如果使用list
创建列表而不是大括号,则仍会评估变量。