我想知道为什么在新版的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 使用。