为什么匹配
[[ 'hithere' =~ hi* ]]
但这不是
[[ 'hithere' =~ *there ]]
答案 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的开头是普通字符
Source:http://man7.org/linux/man-pages/man7/regex.7.html
Jeff Bowman的回答是因为
[[ 'hithere' =~ .*there ]] && echo "Yes"
.
之前有一个*
。