2013-04-14 73 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