2016-01-10 29 views
1

我一直在苦苦掙扎幾個小時。這是爲什麼發生?bash中的正則表達式:單詞類不生成匹配

$ if [[ "test" =~ \w+ ]]; then echo "yes"; else echo "no"; fi 
no 

$ if [[ "t" =~ \w+ ]]; then echo "yes"; else echo "no"; fi 
no 

$ if [[ "w" =~ \w+ ]]; then echo "yes"; else echo "no"; fi 
yes 

$ if [[ "wwwww" =~ \w+ ]]; then echo "yes"; else echo "no"; fi 
yes 

就好像逃避的反斜槓沒有任何作用。爲什麼?我注意到包裝在引號中的正則表達式沒有幫助:

$ if [[ "test" =~ "\w+" ]]; then echo "yes"; else echo "no"; fi 
no 

如果它的事項,這條線是在bash功能,從.sh文件來源和運行的zsh。

+0

'\ w'字符類在bash中不存在。 –

回答

0

Bash代表它的角色類有點不同(從你的期望)。可用文檔here。以下內容應該可以工作:

if [[ "test" =~ '^[[:alnum:]]+$' ]]; then echo "yes"; else echo "no"; fi 
+0

完美 - 謝謝。我很驚訝,我無法在interwebs上找到這個。 – glifchits

+0

'$ if [[「t!(\ 2g/* 2」=〜[[:alnum:]] +]];然後回顯「yes」;否則回顯「no」; fi' 'yes' '[[:alnum:]]'似乎太慷慨了 – glifchits

+1

如果你希望整個字符串都是字母數字,使用''^ [[:alnum:]] + $'' - 當前版本只檢查1個或更多'[:alnum:]'存在於字符串中。 –