我想知道为什么在新版本的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:unescaped ^或$不支持-Pz"。我试图逃避^和$符号,但它没有帮助。
在Ubuntu 15.10脚本中运行完美。
答案 0 :(得分:3)
问题似乎是bug with 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使用。