Обновление значений массива TCL на основе аргумента командной строки - PullRequest
2 голосов
/ 07 апреля 2010

Я пытаюсь подставить значение переменной внутри массива, чтобы обновить значения массива на основе входных данных командной строки. например Я получаю 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 ]

3 голосов
/ 07 апреля 2010

Используйте команду 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 голос
/ 07 апреля 2010

Я думаю, что ваш код будет легче понять и легче поддерживать, если вы не попытаетесь использовать массив, установленный в этом случае.Вы можете избежать неприятностей, если будете осторожны (см. Ответы, связанные с использованием списка), но на самом деле нет причин делать это таким образом, когда существует более читаемое решение.

Вот мое решение:

set myArr(1) "myCmd1($myIP,\"abc.txt\")"
set myArr(2) "myCmd2($myIP,\"xyz.txt\")"
set myArr(3) "myCmd3($myIP,\"klm.txt\")"
0 голосов
/ 07 апреля 2010

попробовать:

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

Почему? Потому что когда вы пишете {$var} в Tcl, это означает $var, а не содержимое переменной var. Если вы используете list для создания списка вместо фигурных скобок, переменные по-прежнему оцениваются.

...