如何在tcl开关语句中使用或?

时间:2013-03-05 01:28:23

标签: tcl

我希望在我的脚本中有一个很大的选项列表。用户将提供仅与这些选项之一匹配的输入。我希望能够有多个不同的选项运行相同的命令,但我似乎无法让OR运行。以下是我认为它应该是什么样的,关于如何使a或b线工作的任何想法?

switch -glob -- $opt {
   "a" || "b" {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}

3 个答案:

答案 0 :(得分:11)

您可以使用-作为案例的正文,直至下一个正文,如Tcl Manual中所述:

  

如果一个体被指定为“ - ”,则表示下一个体   模式也应该用作这种模式的主体(如果是下一个模式)   模式也有一个“ - ”的身体,然后使用身体后,和   等等)。此功能可以在其中共享单个主体   几种模式。

此外,如果您的选项是一大串连续字符,那么您将不得不使用通配符来勾选您的选项模式,或者只有当opt只包含一个选项时,您的情况才会匹配:

switch -glob -- $opt {
   "*a*" -
   "*b*" {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}

答案 1 :(得分:2)

还要这样做:

switch -regexp -- $opt {
   a|b {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}

注意:" a | b"

之间没有空格

答案 2 :(得分:1)

有两种方法。来自the switch documentation examples:“使用全局匹配和直通体是替代编写具有替换的正则表达式......”