gitが私のログ出力を引用符で囲むのはなぜですか?

gitが私のログ出力を引用符で囲むのはなぜですか?

次のコマンドを使用する場合:

git log --pretty=format:"%ad %s%d"

出力は次のとおりです

2016年4月26日火曜日11:29:24 +0000設定更新

次のようにすると:

SIMPLE='--pretty=format:"%ad %s%d"'
git log $SIMPLE

その後、出力は次のようになります。

「構成更新2016年4月26日火曜日11:29:24 +0000」

私は私が定義できることを知っていますalias gitl='git log --pretty=format:"%ad %s%d"'。しかし、gitがなぜこれをするのかわかりません。

変数置換メソッドを使用すると、出力が引用符で表示されるのはなぜですか?

答え1

違いは、一部のシェル引用属性によるものです。

これらのいずれかを実行する場合(シェルで引用するのと同じ方法です)

git log --pretty=format:'%ad %s%d'
git log '--pretty=format:%ad %s%d'
git log --pretty=format:%ad\ %s%d
git log --pretty=form'at:%ad %'s%d
git log --pretty=format:%ad" "%s%d
git log --pretty=format:"%ad %s%d"

git2つのパラメータが得られます。最初のものは、log2番目はです--pretty=format:%ad %s%d

実行すると

SIMPLE='--pretty=format:"%ad %s%d"'

変数SIMPLEの値は--pretty=format:"%ad %s%d"含む二重引用符。

今私たちがzshにいて、あなたが実行しているなら

git log $SIMPLE

またはバッシュから

git log "$SIMPLE"

git2番目のパラメータをとして扱います--pretty=format:"%ad %s%d"。 (Bashで実行すると、、、および3つのパラメータを使用するため、git log $SIMPLEエラーが発生します。)gitlog--pretty=format:"%ad%s%d"

したがって、変数の内部には内部引用符は必要ありません(に渡したい場合を除くeval)。

関連情報