根据TCL man page for "string match"我应该可以做一个角色类。一个简单的例子:
set rev revA
if { [string match "revA*" $rev } {
puts "revA"
} elseif {[string match "revB" $rev]} {
puts "revB"
} elseif {[string match "rev[CD]" $rev]} {
puts "revC or D"
} else {
puts "none"
}
没有" rev [CD]"部分它工作正常,但如上所示我得到:
% tclsh tmp.tcl
missing close-bracket
我错过了什么?
答案 0 :(得分:1)
真正的错误是您实际上错过了第一个if
if { [string match "revA*" $rev } {
# .............................^
不要忘记[brackets]
也表示Tcl的command substitution,并命令替换happens within double quotes。您需要逃避开括号或使用不同的引号:
} elseif {[string match "rev\[CD]" $rev]} {
} elseif {[string match {rev[CD]} $rev]} {
但是,在这种情况下,使用switch
switch -glob -- $rev {
"revA*" {puts "revA"}
"revB" {puts "revB"}
{rev[CD]} {puts "revC or D"}
default {puts "none"}
}