Git Bash:我如何把所有的arg都弄成一个字符串?

Git Bash:我如何把所有的arg都弄成一个字符串?,git,bash,shell,Git,Bash,Shell,动机:我正在构建一个命令commitdeploy,我想接受非常原始的shell输入: bash$ ./commitdeploy this is my commit message 所以我有一个脚本,看起来像: #!/bin/bash ... git commit -a -m"$@" && ./deploy 产生: fatal: Paths with -a does not make sense. 以下是我所知道的: $@是参数列表 “$@”是转换为字符串的参数列表,在使用时

动机:我正在构建一个命令
commitdeploy
,我想接受非常原始的shell输入:

bash$ ./commitdeploy this is my commit message
所以我有一个脚本,看起来像:

#!/bin/bash
...
git commit -a -m"$@" && ./deploy
产生:

fatal: Paths with -a does not make sense.
以下是我所知道的:

$@
是参数列表

“$@”
是转换为字符串的参数列表,在使用时应显示为单个参数

我的问题是,bash到底想向git发送什么?如果
git
接收到的
“$@”
不是一个单独的参数,那么我认为我对上面
“$@”
的描述是不正确的。看来我需要多加些引号

那么,以下哪一项(如果有的话)是正确的方法,为什么

选项1:
git commit-a-m“\”$@\”

选项2:
git commit-a-m \“$@”

如果希望所有内容都包含在一个参数中,请使用
“$*”
而不是
“$@”

这是一个POSIX特性,因此它将在所有POSIX兼容的shell中工作,而不是bash ism

#!/bin/sh
# Don't use /bin/bash unless you really need bash-only features.
git commit -a -m "$*" && ./deploy

男孩,很难用谷歌搜索这些东西。一定有一个很好的参考资料告诉我所有我需要知道的关于$*和$@之间的区别。事实上,我知道我至少看到过两个网页对此进行了详细说明。
“$@”
“$*”
之间的区别在于第一个基本上是“传递”参数,而第二个扩展为单个字符串。所以,$@是特别的。可以代码在shell脚本中转换为指令的方式对我来说仍然有点神奇。但是,嘿,我现在知道的足够多了,可以让这个整洁的小脚本运行了。有意思的是(感觉有点危险),我可以做一些疯狂的事情,比如在里面放一个地球仪,我的提交信息会得到扩展glob@StevenLu谢谢@Amber,我觉得这是一个很好的赞美(并给了我急需的背景)