Ошибка при поиске списка при интерактивном использовании TCL - PullRequest
0 голосов
/ 18 апреля 2019

Я использую Cisco Nexus 5548Up с версией ОС Cisco 7.0.5 (N1) 1. Это поставляется с интерпретатором TCL версии 8.5.7, который я использую в интерактивном режиме, но получая результаты, которые я не понимаю и не знаю, как исправить.

set VLAN_MATCH_LIST {}
lappend VLAN_MATCH_LIST 102
lappend VLAN_MATCH_LIST 122
lappend VLAN_MATCH_LIST 232
lappend VLAN_MATCH_LIST 242
lappend VLAN_MATCH_LIST 243
lappend VLAN_MATCH_LIST 246
lappend VLAN_MATCH_LIST 259
lappend VLAN_MATCH_LIST 283
lappend VLAN_MATCH_LIST 286
lappend VLAN_MATCH_LIST 288
lappend VLAN_MATCH_LIST 334
lappend VLAN_MATCH_LIST 341
lappend VLAN_MATCH_LIST 346
lappend VLAN_MATCH_LIST 356
lappend VLAN_MATCH_LIST 358
lappend VLAN_MATCH_LIST 373

puts "List: $VLAN_MATCH_LIST"
puts "Found item 122 at index [lsearch VLAN_MATCH_LIST 122]"

К сожалению, я ожидаю найти "122" в индексе 1, но я продолжаю получать этот вывод (только последние 2 строки):

List: 102 122 232 242 243 246 259 283 286 288 334 341 346 356 358 373
Found item 122 at index -1

Если вам интересно, я делаю весь материал lappend вместо использования команды set, чтобы убедиться, что проблема не связана с моим синтаксисом инициализации переменной, а скорее с чем-то более существенным.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы присваиваете имя переменной lsearch, а не список значений, содержащихся в этой переменной.Вам нужно разыменовать имя, добавив к нему префикс $:

puts "Found item 122 at index [lsearch $VLAN_MATCH_LIST 122]"

Tcl очень заботится о разнице между именами переменных и их содержимым.Некоторые команды Tcl принимают имена переменных (как set, так и lappend в вашем скрипте похожи на это);обычно это происходит потому, что они обновляют переменную.Сами значения логически доступны только для чтения (реализация умнее этого, но сейчас об этом не стоит думать).

1 голос
/ 18 апреля 2019

Ссылка на переменную списка должна быть со знаком $.Попробуйте вместо этого использовать [lsearch $VLAN_MATCH_LIST 122].Кроме того, правило соответствия списков по умолчанию - -glob.Это не приведет к ошибкам в вашем случае, но рекомендуется использовать правило соответствия -exact, если вы этого ожидаете.

...