我正在尝试为你要在git上提交的消息做一个钩子。我通常在提交时做的是[SOME_DESCRIPTION]参考#[0-9] +
我之前从未做过shell脚本,但我对编程很擅长。我正在尝试在commit-msg中编写一个脚本,该脚本将验证您尝试保存的当前是否具有“* Refs#[0-9] +”模式。但我没有shell语法经验,也没有太多linux。
requireTicketRef=$1
if [[ $requireTicketRef == *Refs \#[0-9]+ ]]
then
echo "Contains ticket reference"
exit 0
else
echo "Need to add ticket reference"
exit 1
fi
答案 0 :(得分:1)
假设您$1
是提交消息是正确的,那么您的代码就很接近了,但bash在==
中[[
使用的模式... ]]
不是正则表达式。它们是用于扩展文件名的相同类型的通配符,通常称为“globs”,通常无法量化特定匹配(如“1位或更多位”)。
(它们也必须是一个单词,因此您需要在Refs
和#
之间的空格前面添加另一个反斜杠。而您实际上不需要在#
和[[
之前的空格。 {1}}当它不是一句话中的第一句话时。)
您有几种方法可以解决此问题。最简单的可能就是使用实际的正则表达式,只需使用]]
代替=~
,就可以在==
... if [[ ! $requireTicketRef =~ Refs\ #[0-9]+ ]]; then
echo >&2 "Need to add ticket reference."
exit 1
fi
内执行:
extglob
另一种选择是打开shopt -s extglob
if [[ ! $requireTicketRef == *Refs\ #+([0-9])* ]]; then
echo >&2 "Need to add ticket reference."
exit 1
fi
(“扩展的glob”)选项,该选项借用了Korn shell的一些语法,为类型集合带来了类似正则表达式的功能(否定,交替,量化)。
{{1}}