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

Syntax 基于命令行参数的TCL数组值更新,syntax,tcl,Syntax,Tcl,我试图替换数组中的变量值,以便根据命令行输入更新数组值。 e、 g.我正在接收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")

我试图替换数组中的变量值,以便根据命令行输入更新数组值。 e、 g.我正在接收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]}
,但都不起作用

提前感谢您的帮助/意见。

请尝试:

array set myArr [list myCmd1($myIP, "abc.txt") 2 myCmd2($myIP, "xyz.txt") ... ]

为什么??因为在Tcl中编写
{$var}
时,它的意思是
$var
,而不是变量
var
的内容。如果使用
list
创建列表而不是大括号,则仍会计算变量。

使用
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")
%

我认为,如果您在这个实例中不尝试使用数组集,那么您的代码将更容易理解和维护。如果你很小心的话,你可以不受惩罚(请参阅与使用列表相关的答案),但如果有一个更具可读性的解决方案存在,你真的没有理由这样做

以下是我的解决方案:

set myArr(1) "myCmd1($myIP,\"abc.txt\")"
set myArr(2) "myCmd2($myIP,\"xyz.txt\")"
set myArr(3) "myCmd3($myIP,\"klm.txt\")"

这不只是有点坏。引用的位“abc.txt”前面有空格(多个元素?),后面有字符(解析错误!)。