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"}
}