2013-10-11 72 views
7

,所以我有這個功能猛砸正則表達式匹配不工作

function test(){ 
local output="CMD[hahahhaa]" 
if [[ "$output" =~ "/CMD\[.*?\]/" ]]; then 
    echo "LOOL" 
else 
    echo "$output" 
fi; 

} 

但是執行測試的命令行會輸出$輸出,而不是「LOOL」儘管這個模式應該匹配$輸出...

我做錯了什麼?

+0

您是否試圖使用'。*?'作爲非貪婪匹配? 'bash'不支持Perl風格的運算符。正斜槓也是Perl匹配語法的一部分,而不是正則表達式本身的一部分。 – chepner

回答

13

不要使用引號""

if [[ "$output" =~ ^CMD\[.*?\]$ ]]; then 


更新: (響應@frhd)

好了,正則表達式運算符=~預計上不帶引號的正則表達式的RHS並且只做一個子串匹配,除非錨點^(輸入開始)和$(e輸入的nd)也被用來使它匹配整個LHS。

語錄""覆蓋這種行爲並迫使一個簡單的字符串匹配,而不是即匹配開始尋找所有這些字符\[.*?\]字面上。

+0

+1不得不刪除我的答案:) – anubhava

+0

來吧,這將已經過工作:) –

+0

這將有,但你的答案是約30秒快 – anubhava