TCL数组值基于命令行参数进行更新

时间:2010-04-06 21:32:23

标签: syntax tcl

我试图在数组中替换变量值,以便根据命令行输入更新数组值。 例如我收到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]},但没有一种正在发挥作用。

提前感谢任何帮助/输入。

3 个答案:

答案 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创建列表而不是大括号,则仍会评估变量。