List 交互使用TCL时搜索列表时出错
我正在运行一个Cisco Nexus 5548Up和Cisco OS 7.0.5(N1)1版。它附带了一个TCL解释器,版本8.5.7,我正在以交互方式使用它,但得到的结果我既不理解也不知道如何更正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
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
都是这样);这通常是因为他们正在更新变量。值本身在逻辑上是只读的(实现比这更智能,但这不是您现在应该考虑的问题)。啊!非常感谢。那正好解决了问题。啊!非常感谢。这完全解决了问题,明白了。感谢您的培训!明白了。感谢您的培训!