0

动机:我正在构建一个命令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 列表。

"$@"是否将 arg 列表转换为字符串,使用时应显示为单个 arg

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

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

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

4

1 回答 1

2

如果您想要一个参数中的所有内容,请使用"$*"而不是。"$@"

这是一项 POSIX 功能,因此它适用于所有与 POSIX 兼容的 shell,而不是 bash 主义。

#!/bin/sh
# Don't use /bin/bash unless you really need bash-only features.
git commit -a -m "$*" && ./deploy
于 2013-02-02T02:39:25.217 回答