7

我想在我的脚本中有大量选项。用户将提供仅匹配其中一个选项的输入。我希望能够让多个不同的选项运行相同的命令,但我似乎无法让 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"
   }
}
4

3 回答 3

16

您可以将-其用作案例的主体,以传递到下一个主体,如Tcl 手册中所述:

如果一个主体被指定为“-”,则意味着下一个模式的主体也应该用作该模式的主体(如果下一个模式也有一个“-”的主体,那么使用之后的主体,并且很快)。此功能可以在多个模式之间共享一个实体。

此外,如果您的选项是一串连接字符,您将不得不使用通配符预订您的选项模式,否则您的案例仅在opt仅包含一个选项时才会匹配:

switch -glob -- $opt {
   "*a*" -
   "*b*" {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}
于 2013-03-05T03:09:05.267 回答
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”之间不能有空格

于 2016-09-09T08:37:17.437 回答
1

有两种方法。来自switch 文档示例:“使用全局匹配和贯穿正文是编写带有交替的正则表达式的替代方法......”

于 2013-03-05T02:18:13.110 回答