我在TCL教程页面上找到了以下说明:
\ X
反斜杠在Tlob替换中的转义中转义了一个特殊字符。使用反斜杠可让您使用glob来匹配*或?。
Simple pattern matching - "globbing"
然后我有以下代码用于测试:
set list1 "1 2 3 *"
puts [lsearch $list1 *]
puts [lsearch $list1 \*]
set list2 "a b ? c"
puts [lsearch $list2 ?]
puts [lsearch $list2 \?]
但是,结果与我预期的有些不同。 所有这4个puts命令都返回索引0,以列表中的第一个元素为参考。
为什么puts [lsearch $list1 \*]
和puts [lsearch $list2 \?]
不返回3
和2
。我认为在*
和?
前面加上反斜杠后,这些字符不再具有任何特殊含义。
答案 0 :(得分:2)
反斜杠在标准Tcl语法中也用于转义各种字符。
您需要转义反斜杠,以便将其传递到lsearch
命令。
所以您需要:
set list1 "1 2 3 *"
puts [lsearch $list1 *]
puts [lsearch $list1 \\*]
puts [lsearch $list1 {\*}] ; # or this
set list2 "a b ? c"
puts [lsearch $list2 ?]
puts [lsearch $list2 \\?]
puts [lsearch $list2 {\?}]