2012-06-03 54 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這是一個重要的一點! –