动机:我正在构建一个命令commitdeploy
,我想接受非常原始的shell输入:
bash$ ./commitdeploy this is my commit message
所以我有一个看起来像的脚本:
#!/bin/bash
...
git commit -a -m"$@" && ./deploy
产生:
fatal: Paths with -a does not make sense.
以下是我所知道的:
$@
是arg-list。
"$@"
是转换为字符串的arg-list,使用时应显示为单个arg
我的问题是,bash试图发送到git
究竟是什么?如果git
正在接收"$@"
而不是单个arg,那么我认为我对上述"$@"
的描述不正确。看起来我需要更多的引号!
那么,以下哪一项(如果有的话)是正确的,为什么?
选项1:git commit -a -m"\"$@\""
选项2:git commit -a -m\""$@"\"
答案 0 :(得分:2)
如果您想要一个参数中的所有内容,请使用"$*"
代替"$@"
。
这是一个POSIX功能,因此它可以在所有POSIX兼容的shell中运行,而不是bash-ism。
#!/bin/sh
# Don't use /bin/bash unless you really need bash-only features.
git commit -a -m "$*" && ./deploy