Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 交互使用TCL时搜索列表时出错_List_Search_Tcl_Interactive - Fatal编程技术网

List 交互使用TCL时搜索列表时出错

List 交互使用TCL时搜索列表时出错,list,search,tcl,interactive,List,Search,Tcl,Interactive,我正在运行一个Cisco Nexus 5548Up和Cisco OS 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_MA

我正在运行一个Cisco Nexus 5548Up和Cisco OS 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]"
不幸的是,我希望在索引1中找到“122”,但我一直得到这个输出(仅最后两行):


如果你想知道的话,我做了所有的lappend工作,而不是使用
set
命令,因为我想确保问题与我的变量初始化语法无关,而是与更实质性的内容有关。

对列表变量的引用应该使用
$
符号。尝试改用
[lsearch$VLAN\u MATCH\u LIST 122]
。此外,默认列表匹配规则是
-glob
。在您的情况下,Is不会导致错误,但如果您希望,最好使用
-exact
匹配规则

对列表变量的引用应带有
$
符号。尝试改用
[lsearch$VLAN\u MATCH\u LIST 122]
。此外,默认列表匹配规则是
-glob
。在您的情况下,Is不会导致错误,但如果您希望,最好使用
-exact
匹配规则

您将变量的名称指定给
lsearch
,而不是该变量中包含的列表值。您需要在名称前面加上
$
,以解除对名称的引用:

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

Tcl非常关心变量名称及其内容之间的差异。一些Tcl命令采用变量名称(脚本中的
set
lappend
都是这样);这通常是因为他们正在更新变量。值本身在逻辑上是只读的(实现比这更智能,但这不是您现在应该考虑的问题)。

您将变量的名称指定给
lsearch
,而不是该变量中包含的列表值。您需要在名称前面加上
$
,以解除对名称的引用:

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

Tcl非常关心变量名称及其内容之间的差异。一些Tcl命令采用变量名称(脚本中的
set
lappend
都是这样);这通常是因为他们正在更新变量。值本身在逻辑上是只读的(实现比这更智能,但这不是您现在应该考虑的问题)。

啊!非常感谢。那正好解决了问题。啊!非常感谢。这完全解决了问题,明白了。感谢您的培训!明白了。感谢您的培训!