2013-04-14 72 views
1

我不是說這個問題只適用於UNIX,但是我在Solaris上工作,並且我沒有在任何其他操作系統上嘗試它。UNIX中的擴展正則表達式

第一: 我的擴展正則表達式之間的混淆

[[ "str" == ?(str|STR) ]] && echo "matched" 

這項工作是正確的,但是當:

[[ "str str" == ?(str|STR)(.*) ]] && echo "matched" 

這是行不通的,這是否意味着我只能比較一種模式。

二:

[[ "str" =~ ?(str|STR) ]] && echo "matched" 

我不能在這裏爲什麼要用這種形式?,但當:

[[ "str" == (str|STR)? ]] && echo "matched" 

它工作正常。

回答

2

它看起來像你試圖 extended globsextended regular expressions結合。我會說這是一件壞事。

$ set '(str|STR)' 

$ [[ 'str' =~ $1 ]] && echo matches 
matches 

$ [[ 'str str' =~ $1 ]] && echo matches 
matches