2016-09-29 52 views
0

我有以下bash脚本。如何使基于grep正则表达式的bash脚本失败?

我试图解决的问题非常简单。当Git中的提交否以gh-1234 ...开头时,它应该失败。

这个bash脚本有什么问题?

commit_regex='(gh-[0-9]+|merge)' 

error_msg="Aborting commit. Your commit message is missing either a Github Issue ('gh-1111') or 'Merge'." 

if ! grep -q "$commit_regex" <<< "$1"; then 
    echo "$error_msg" >&2 
    exit 1 
fi 
+2

我想你想'grep -E'? – psmears

回答

1

正如评论所说,你需要做的grep -E "$commit_regex"

man grep页面级

-E,--extended- 解释图案作为扩展正则表达式(ERE , 见下文)。 (-E由POSIX指定。)

这应该解决你的问题,因为它会强制grep扩展变量。

0

也是另一种方式来达到同样的不grep的:

if [[ $git_message=~ $commit_regex ]] 
then 
    echo "$error_msg" 
    exit 1; 
fi 

另外:如果提交其“GH-1234”的任务是在消息的开始,你应该在你的正则表达式添加^

+0

O,但我不想再检查$ error_msg正则表达式。我想检查一下git commit –

+0

是的,当然,如果提交的格式为“gh-1234”,那么它对git commit也有效。我只是以error_msg为例,因为它也有“gh-1111”条目。 – Rambler