2012-06-03 51 views

回答

2

当你想匹配]为一组的一部分switch中的字符,你只有几个选择:

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

    switch -regexp $x { 
        ^[][(){}]$ { 
         puts "Matched!" 
        } 
    } 
    
  2. 使用多个条款与身体交流:

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

无法做的是在设定除的非初始部分水珠比赛放在什么]一个范围(glob匹配器非常笨,但很快)。没有任何合适的范围与您在此之后的内容完全匹配,因此单个glob将无法工作。

+0

这是所有基于您对Noxx的_otherwise伟大的答案,你匹配后(如果它工作)的评论:'[(()[] {}]' –

4

你可以使用:

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

或匹配比支架更多:

set x "foo]bar"; 
switch -glob $x { 
    *\]* { 
     puts "MATCH ]" 
    } 
} 
+0

此外,文字']'工作(这被解析为_list_),'{]}'也是如此。当它遵循一个(未转义的)''''时,globbbing只会把'''看作是特殊的。 –

+0

我需要它作为几个选项之一。我的完整程序有这样的''[[()[] {}]“'',除非这是行不通的。但是你的例子只会匹配括号,没有别的。 – baruch

+0

@baruch这是一个重要的一点! –