Bash regex =〜运算符匹配前缀

时间:2015-09-30 17:46:31

标签: bash

为什么匹配

[[ 'hithere' =~ hi* ]]

但这不是

[[ 'hithere' =~ *there ]]

2 个答案:

答案 0 :(得分:5)

=~具体是regular expressions operator。如果您想匹配零个或多个字符,则需要.*而不仅仅是*

[[ 'hithere' =~ hi.* ]] && echo "Yes"
Yes

[[ 'hithere' =~ .*there ]] && echo "Yes"
Yes

如果没有锚点,即使没有通配符,匹配也会成功。

[[ 'hithere' =~ hi ]]
[[ 'hithere' =~ there ]]
# Add anchors to guarantee you're matching the whole phrase.
[[ 'hithere' =~ ^hi.*$ ]]
[[ 'hithere' =~ ^.*there$ ]]

对于模式匹配,您可以将=与不带引号的值一起使用。这会改为使用bash pattern matching,这就是你(显然)所期望的。

[[ 'hithere' = hi* ]] && echo "Yes"
Yes

[[ 'hithere' = *there ]] && echo "Yes"
Yes

答案 1 :(得分:2)

基本正则表达式

前面*

只是一个字符,不被视为正则表达式的特殊字符。

  

' *'如果它出现在RE的开头是普通字符

Sourcehttp://man7.org/linux/man-pages/man7/regex.7.html

Jeff Bowman的回答是因为

[[ 'hithere' =~ .*there ]] && echo "Yes" .之前有一个*