TCL角色等级

时间:2016-11-08 21:25:42

标签: tcl

根据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

我错过了什么?

1 个答案:

答案 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

更有效,而不是级联if-elseifs
switch -glob -- $rev {
    "revA*"   {puts "revA"}
    "revB"    {puts "revB"}
    {rev[CD]} {puts "revC or D"}
    default   {puts "none"}
}