假设我想匹配字符串“.a”
中的前导点所以我输入
[[“.a”=〜^ \。 ]]&&回声“哈”
公顷
[[“a”=〜^ \。 ]]&&回声“哈”
公顷
为什么我在这里得到相同的结果?
答案 0 :(得分:1)
你需要在一段时间内逃脱它有意义的点 - 它是正则表达式中的元字符。
[[ "a" =~ ^\. ]] && echo "ha"
也可以在另一个例子中进行更改。
检查你的bash版本 - 我相信你需要4.0或更高版本。
答案 1 :(得分:1)
在=~
之后Bash
版本之间的3.0
存在一些兼容性问题。在Bash中使用=~
的最安全方法是将RE模式放在var:
$ pat='^\.foo'
$ [[ .foo =~ $pat ]] && echo yes || echo no
yes
$ [[ foo =~ $pat ]] && echo yes || echo no
no
$
有关详细信息,请参阅E14 on the Bash FAQ page。
答案 2 :(得分:0)
可能是因为bash试图对待“。”作为\字符,如\ n \ r等。
为了告诉\& 。作为2个单独的字符,请尝试
[[ "a" =~ ^\\. ]] && echo ha