2016-06-13 80 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

你可以跳出單引號,附加你的變量,然後恢復單引號。只要有一個在之間沒有空格,shell將其當作一個單一值(見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

雖然這是一個有用的提示,但它不提供解決方案或建議我如何解決我的問題。 –

+0

@PetrusK。在雙引號內部,shell執行變量擴展,在單引號內部不執行。查看更新後的答案中的示例。 – Leon

+0

謝謝,我最終在腳本中使用了您的解決方案,因爲它比使用單引號更簡潔。 –