我正在尝试以类似于bash的方式在
$ git commit -m "message as a sentence"
或
$ something "foo bar"
然后,我想提取message as a sentence
和foo bar
。
到目前为止,我所做的是:
if [[ "$2" =~ "-m" ]]; then
if [ -z $3 ]; then
echo "Must have a message"
else
# @TODO
fi
fi
有什么想法吗?
答案 0 :(得分:2)
从注释继续,在命令行中有关脚本参数的操作由外壳程序处理。因此,当您提供命令行参数时,将应用常规的shell扩展和单词拆分。当您在脚本中引用参数时,您的外壳程序会适当地避免在引号中引起单词拆分,但是实际的引号本身会被外壳程序删除。
在脚本中,位置参数将正确包含外壳程序处理参数的结果。因此,根据您的情况,您的脚本(或示例中的git
)将会收到,
$1 : commit
$2 : -m
$3 : your message as a sentence
您的脚本逻辑很好,您在脚本中遇到的问题是引用不正确。具体来说,[[ ... ]]
不需要引号,但是[ ... ]
不需要引号。
由于您没有在$3
中引用[ -z $3 ]
,因此您实际上是在问:
[ -z your message as a sentence ]
shell将接受太多参数。因此,要解决此问题,请在使用test
或[ ... ]
(同义)时引用,例如
[ -z "$3" ]
仔细检查一下,如果还有其他问题,请告诉我。