0

動機:commitdeploy非常に生のシェル入力を受け入れたいコマンドを作成しています:

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\""$@"\"

4

1 に答える 1

2

すべてを 1 つの引数にまとめたい場合は、"$*"代わりに使用します。"$@"

これは POSIX 機能であるため、すべての POSIX 互換シェルで機能し、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 に答える