假设我想匹配字符串“.a”中的前导点
所以我输入
[[ ".a" =~ ^\. ]] && 回声“哈”
哈
[[“一”=~^\。]] && 回声“哈”
哈
为什么我在这里得到相同的结果?
您需要转义它的意义超出句点的点 - 它是正则表达式中的元字符。
[[ "a" =~ ^\. ]] && echo "ha"
在另一个示例中也进行更改。
检查您的 bash 版本 - 我相信您需要 4.0 或更高版本。
之后的版本=~
之间存在一些兼容性问题。在 Bash 中使用最安全的方法是将 RE 模式放在 var 中:Bash
3.0
=~
$ pat='^\.foo'
$ [[ .foo =~ $pat ]] && echo yes || echo no
yes
$ [[ foo =~ $pat ]] && echo yes || echo no
no
$
有关更多详细信息,请参阅Bash 常见问题页面上的 E14。
可能是因为 bash 试图处理 "." 作为 \ 字符,如 \n \r 等。
为了告诉 \ & 。作为 2 个单独的字符,请尝试
[[ "a" =~ ^\\. ]] && echo ha