2016-06-13 15 views
0

Ich möchte eine ganze Zahl übergeben in einer Bash-Variablen zu git show --format, wie kann ich das tun?
Wenn ich die Variable übergebe, behandelt der Git-Formatierer sie wie ein Literal und ruft nicht ihren Wert ab, sondern gibt den Namen der Variablen aus.
Ich habe ein Skript geschrieben, das einige Verarbeitung tut aber der Kürze halber werde ich den relevanten Teil des Skripts einfügen:Eine Bash-Variable an Git-Formatierer übergeben

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

Derzeit gibt es so etwas wie:

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

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

Was ich es will die Ausgabe ist statt:

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

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

Antwort

1

Sie aus dem Apostroph brechen kann, Ihre Variable anzuhängen, dann den Apostroph wieder aufnehmen. Solange es dazwischen keine Leerzeichen ist, wird die Shell es als Einzelwert behandeln (siehe word splitting):

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

Danke, wie erwartet funktioniert. Danke für den Link, nützlich zu wissen. Ich werde diese Antwort als akzeptiert markieren, sobald ich kann. –

1

Für diesen speziellen Fall ist es sicher, den Format-String mit doppelten Anführungszeichen statt einfacher Anführungszeichen zu zitieren:

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

in doppelten Anführungszeichen führt die Shell-Variable Expansion im Inneren einfachen Anführungszeichen nicht:

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

Während dies ein nützlicher Tipp ist, bietet es keine Lösung oder einen Vorschlag, wie ich meine Frage lösen kann. –

+0

@ PetrusK. In doppelten Anführungszeichen führt die Shell eine variable Erweiterung durch, in einfachen Anführungszeichen dagegen nicht. Siehe das Beispiel in der aktualisierten Antwort. – Leon

+0

Danke, ich habe Ihre Lösung in meinem Skript verwendet, da sie weniger unordentlich ist als einfache Anführungszeichen. –

Verwandte Themen