TCL字符类

TCL字符类,tcl,Tcl,根据我的要求,我应该可以做一个角色类。一个简单的例子: 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]”部

根据我的要求,我应该可以做一个角色类。一个简单的例子:

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

我遗漏了什么?

真正的错误是,如果

if { [string match "revA*" $rev } {
# .............................^
不要忘记,
[括号]
也表示Tcl和命令替换。您需要转义开括号或使用不同的引号:

} elseif {[string match "rev\[CD]" $rev]} {
然而,在这种情况下,使用if-ElseIf比级联if-ElseIf更有效


太棒了-非常感谢你。在我原来的帖子里有个坏例子。我得到的实际错误是“无效的命令名”CD“,但您在回答中也提供了修复方法。谢谢你提供的关于开关的信息。
} elseif {[string match {rev[CD]} $rev]} {
switch -glob -- $rev {
    "revA*"   {puts "revA"}
    "revB"    {puts "revB"}
    {rev[CD]} {puts "revC or D"}
    default   {puts "none"}
}