Bash:我如何将所有的args刷成字符串?

时间:2013-02-02 02:37:12

标签: 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.

以下是我所知道的:

$@是arg-list。

"$@"是转换为字符串的arg-list,使用时应显示为单个arg

我的问题是,bash试图发送到git究竟是什么?如果git正在接收"$@"而不是单个arg,那么我认为我对上述"$@"的描述不正确。看起来我需要更多的引号!

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

选项1:git commit -a -m"\"$@\""
选项2:git commit -a -m\""$@"\"

1 个答案:

答案 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