2016-11-08 28 views
1

根据TCL man page for "string match"我应该可以做一个角色类。一个简单的例子: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" 
} 

没有“转[CD]”部分它工作正常,但如上图所示,我得到:

% tclsh tmp.tcl 
missing close-bracket 

我缺少什么?

回答

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]} { 

然而,这是更有效的在这种情况下,而不是级联如果-elseifs,用switch

switch -glob -- $rev { 
    "revA*" {puts "revA"} 
    "revB" {puts "revB"} 
    {rev[CD]} {puts "revC or D"} 
    default {puts "none"} 
} 
+0

太棒了 - 非常感谢你。在我原来的帖子中不好的例子。我得到的实际错误是'无效的命令名称'CD'',但您在答案中也提供了该修复程序。感谢关于交换机的信息。 –