Обновление значений массива 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]}, но ни одна из них не работает.

Заранее спасибо за любую помощь/вклад.


person Raj    schedule 06.04.2010    source источник


Ответы (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")
%
person Andrew Stein    schedule 06.04.2010

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

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

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

пытаться:

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

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

person Miguel Ventura    schedule 06.04.2010
comment
Это более чем сломано. Биты в кавычках "abc.txt" имеют пробел перед (несколько элементов?) и символ после (ошибка синтаксического анализа!). - person Donal Fellows; 07.04.2010