0

假设我想匹配字符串“.a”中的前导点

所以我输入

[[ ".a" =~ ^\. ]] && 回声“哈”

[[“一”=~^\。]] && 回声“哈”

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

4

3 回答 3

1

您需要转义它的意义超出句点的点 - 它是正则表达式中的元字符。

 [[ "a" =~ ^\. ]] && echo "ha"

在另一个示例中也进行更改。

检查您的 bash 版本 - 我相信您需要 4.0 或更高版本。

于 2013-03-17T03:18:53.880 回答
1

之后的版本=~之间存在一些兼容性问题。在 Bash 中使用最安全的方法是将 RE 模式放在 var 中:Bash3.0=~

$ pat='^\.foo'
$ [[ .foo =~ $pat ]] && echo yes || echo no
yes
$ [[ foo =~ $pat ]] && echo yes || echo no
no
$

有关更多详细信息,请参阅Bash 常见问题页面上的 E14

于 2013-03-18T06:56:26.013 回答
0

可能是因为 bash 试图处理 "." 作为 \ 字符,如 \n \r 等。

为了告诉 \ & 。作为 2 个单独的字符,请尝试

[[ "a" =~ ^\\. ]] && echo ha
于 2013-03-17T06:35:36.457 回答