использование переменной в качестве имени массива в сценарии TCL (массив)

Ubuntu Saucy Salamander (13.10) была завершена в июле 2014 года, как показано здесь . Вы получаете сообщение об ошибке, потому что файлы не могут быть найдены (ошибка 404 в конце вывода apt-get update означает, что файл не найден).

Если вы посмотрите репозиторий по адресу http://archive.ubuntu.com/ubuntu/dists/ , то заметите, что saucy там не указан - отсюда и 404 ошибка.

2
22.03.2019, 16:32
2 ответа

Я не уверен, что понимаю, что вам нужно, но вот несколько примеров того, как косвенно ссылаться на элемент массива в tcl:

% set array(key1) {value 1}
value 1
% set aname array
array
% set ${aname}(key2) {value 2}
value 2
% array get ${aname}
key {some value} key1 {value 1} key2 {value 2}

% set ${aname}(key2)
value 2
% set key key2
key2
% puts "<[set ${aname}($key)]>"
<value 2>

В вашем примере вы можете просто использовать setвместоputs:

% set variable2 {3.5400 7.3200}
3.5400 7.3200
% set variable1 PATH_xyz
PATH_xyz
% set ${variable1}(modifyPt) $variable2
3.5400 7.3200
% set ${variable1}(modifyPt)
3.5400 7.3200

И, как и выше, вы можете использовать его в [...]подстановке команд:

% puts "${variable1}\(modifyPt)={[set ${variable1}(modifyPt)]}"
PATH_xyz(modifyPt)={3.5400 7.3200}
2
27.01.2020, 21:55

Я бы рекомендовал держаться подальше от имен динамических переменных. Вы можете создать «составной» ключ массива, чтобы сделать его простым

.
# setup
set variable1 PATH_xyz
set variable2 {3.5400 7.3200}

# store the data in an array named "data"
set data($variable1,modifyPt) $variable2

# extracting it
% puts $data($variable1,modifyPt)    ; # => 3.5400 7.3200

# print the array contents
parray data    ; # => data(PATH_xyz,modifyPt) = 3.5400 7.3200

Вы можете использовать словарь с именем динамической переменной, но извлечение данных из словаря выглядит немного странно:

# store an empty dictionary in the variable "PATH_xyz"
set $variable1 [dict create]

# `dict set` takes a variable *name*
dict set $variable1 modifyPt $variable2

# `dict get` takes a variable *value*
dict get [set $variable1] modifyPt       ; # => 3.5400 7.3200

Таким же неудобным образом можно использовать массивы:

array set $variable1 [list modifyPt $variable2]
parray $variable1                    ; # => PATH_xyz(modifyPt) = 3.5400 7.3200
puts [set ${variable1}(modifyPt)]    ; # => 3.5400 7.3200

или поистине ужасное

puts [subst -nobackslashes -nocommands $${variable1}(modifyPt)]
3
27.01.2020, 21:55

Теги

Похожие вопросы