2

我将如何获得对switch右括号进行数学运算的语句?我都试过"[][]""[[\]]"

set x "]"

switch -glob $x {
    "[[\]]" {
        puts "MATCH ]"
    }
}
4

2 回答 2

5

您可以使用:

set x "]";
switch -glob $x {
    \] {
        puts "MATCH ]"
    }
}

或匹配多于括号:

set x "foo]bar";
switch -glob $x {
    *\]* {
        puts "MATCH ]"
    }
}
于 2012-06-03T16:23:35.883 回答
3

当您想]作为 中的一组字符的一部分进行匹配时switch,您只有几个选项:

  1. 使用-regexp匹配而不是-glob. 它更复杂,需要不同的模式,但它也绝对更灵活(尤其是当涉及到这样的事情时)。

    switch -regexp $x {
        ^[][(){}]$ {
            puts "Matched!"
        }
    }
    
  2. 在正文共享中使用多个子句:

    switch -glob $x {
        {\[} - {\]} - [(){}] {
            puts "Matched!"
        }
    }
    

不能做的是将 a]放入 glob 匹配集中,除了作为范围的非初始部分(glob 匹配器非常愚蠢,但速度很快)。没有任何合适的范围可以与您在此处所追求的完全匹配,因此单个 glob 将不起作用。

于 2012-06-04T07:30:37.657 回答