2016-06-13 11 views
0

bash変数に保存された整数をgit show --formatに渡したいのですが、どうすればいいですか?
変数を渡すと、gitフォーマッタはそれをリテラルのように扱い、その値を取得せず、変数の名前を出力します。
私はいくつかの処理を行うスクリプトを書きましたが、簡潔にするために、私は、スクリプトの関連部分を貼り付けます:bash変数をgitフォーマッタに渡す

git show -s --format='%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: $lines)%C(reset)%n%B' $i 

現在のところ、それはのようなものを出力します

commit 6fc73ae81627edf220d3005eafbdd3d7f5f898d7 (commit message lines: $lines) 
Fix foo 

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

私はそれ欲しいです

commit 6fc73ae81627edf220d3005eafbdd3d7f5f898d7 (commit message lines: 5) 
Fix foo 

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

答えて

1

一重引用符を壊して変数を追加し、一重引用符を再開することができます。限りの間にスペースがありませんよう、シェルは単一の値として扱います(word splittingを参照してください):この特定のケースでは

--format='%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: '"$lines"')%C(reset)%n%B' 
+0

おかげで、期待通りに動作します。 リンクをありがとう、知っておくと便利です。私はできるだけ早くこの答えを受け入れるとマークします。 –

1

二重引用符の代わりに、単一引用符でフォーマット文字列を引用しても安全です。二重引用符で囲む

git show -s --format="%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: $lines)%C(reset)%n%B" $i 

シェルはそうでない単一引用符の内側に、変数の展開を実行します。

> echo "HOME=$HOME" 
HOME=/home/leon 
> echo 'HOME=$HOME' 
HOME=$HOME 
+0

これは便利なヒントですが、私の質問を解決する方法や提案はありません。 @PetrusK。 –

+0

二重引用符の内部では、シェルは変数展開を行います。更新された回答の例を参照してください。 – Leon

+0

ありがとう、私はあなたの解決策を使用して私のスクリプトでは、一重引用符を使用するよりも不規則です。 –

関連する問題