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,我觉得这是一个很好的赞美(并给了我急需的背景)