bash:传递脚本参数

hat*_*rix 6 git bash

我在提交git项目之前运行了一系列命令,所以我把它放在一个bash脚本中.最后我有一个执行提交的块:

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m $1; fi
Run Code Online (Sandbox Code Playgroud)

期望消息传递给脚本

$ ./dostuff_then_commit "my message"
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我明白了

fatal: Paths with -a does not make sense.
Run Code Online (Sandbox Code Playgroud)

因为$1已定义但消息未正确传递?任何人都可以看到问题和/或提出解决方案吗?谢谢你.

gee*_*aur 6

如果消息包含空格,它将扩展为多个参数git commit.(注意另一种情况下的引用.)引用它:

if [ -z "$1" ]; then
    git commit -a -m "no message"
else
    git commit -a -m "$1"
fi
Run Code Online (Sandbox Code Playgroud)

几个附录:

  • 我也引用了一个,[]原因略有不同:如果提交消息为空,则会从中获取缺少的参数诊断[.再次引用它可以避免这种情况.(您可能希望捕获它并让用户输入真正的提交消息,但如果有必要,您可能会得到一堆asdfzxcv提交消息....)

  • 您获取的错误消息具体是因为提交消息的第一个单词被视为提交消息,其余的作为特定文件名传递给提交; 这个,正如错误消息所述,在告诉git提交一切(-a)时没有任何意义.