grep:-Pz 不支持未转义的 ^ 或 $



我想知道为什么在新版的grep(Ubuntu 16.04)中,我的bash脚本停止工作:

...
COMMIT_REGEX='^[[A-Z]+-[0-9]+] s*S+(?:.|n|r)*s* (review: ([a-z]+.[a-z]+|MYSELF))$'
if ! grep -Paz "$COMMIT_REGEX" "$1"; then
...

我得到"grep:-Pz 不支持未转义的 ^ 或 $"。我试图转义^和$符号,但它没有帮助。

在 Ubuntu 15.10 中,脚本运行良好。

问题似乎是grep -Pz错误的结果(感谢 Lars Fischer 找到相关报告)。

我建议放弃-P开关并改用-E

commit_re='^[[A-Z]+-[0-9]+] s*S+(.|n|r)*s* (review: ([a-z]+.[a-z]+|MYSELF))$'
if ! grep -qEaz "$commit_re" "$1"; then

我所做的唯一更改是将-P更改为-E并添加-q(安静)开关,因为您只对返回代码感兴趣。你真的不需要一个非捕获组,所以我把它改成了一个普通的组。

我也不喜欢看到ALL_CAPS变量名称,因为它们实际上应该保留供 shell 使用。

相关内容

  • 没有找到相关文章

最新更新