如果使用正则表达式,匹配bash中的前导点

时间:2013-03-17 03:09:24

标签: regex bash

假设我想匹配字符串“.a”

中的前导点

所以我输入

  

[[“.a”=〜^ \。 ]]&&回声“哈”

公顷

  

[[“a”=〜^ \。 ]]&&回声“哈”

公顷

为什么我在这里得到相同的结果?

3 个答案:

答案 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