HOWTO · Linux

Wie man Strings in Bash verkettet

Wir können zwei oder mehr String-Variablen in der Bash verknüpfen, indem wir sie entweder nacheinander schreiben oder den Operator += verwenden.

Auf dieser Seite

In Bash lassen sich Zeichenketten verketten, indem Sie ihre Variablen in Anführungszeichen direkt nebeneinander schreiben. Mit += hängen Sie Text an den bisherigen Wert einer Variablen an. Ein Leerzeichen gehört nur dann zum Ergebnis, wenn Sie es ausdrücklich in den zugewiesenen Text aufnehmen.

Methode 1: Einfache Verkettung

Für zwei Werte schreiben Sie ihre Variablenerweiterungen in Anführungszeichen direkt hintereinander. Einen gewünschten Trenner setzen Sie wörtlich in die Anführungszeichen:

string1="Hello"
string2="World"
result="$string1 $string2"
printf '%s\n' "$result"

Die Variable result enthält Hello World, weil in der Zuweisung zwischen $string1 und $string2 ein Leerzeichen steht. Setzen Sie Erweiterungen in Anführungszeichen, wenn Sie einen Wert an einen Befehl übergeben, wie bei printf '%s\n' "$result". So bleiben Leerzeichen und Platzhalterzeichen Teil des Werts, statt eine Wortaufteilung oder Dateinamenerweiterung auszulösen. Geschweifte Klammern grenzen einen Variablennamen ab, wenn angrenzender Text sonst als Teil des Namens gelesen werden könnte, etwa in "${string1}_suffix". Bash-Variablen haben keinen festgelegten Zeichenketten- oder Ganzzahltyp. Daher kann auch ein wie eine Zahl aussehender Wert als Text verwendet werden, zum Beispiel mit number=42 und anschließend label="ID: $number".

Methode 2: Den Operator += verwenden

Mit += hängen Sie den Text auf der rechten Seite an den aktuellen Wert einer Variablen an:

greeting="Hello"
greeting+=" World"
printf '%s\n' "$greeting"

Das vorangestellte Leerzeichen in " World" gehört zum angehängten Text; deshalb enthält greeting anschließend Hello World. Der Operator += aktualisiert dieselbe Variable. Hier hängt er Zeichenkettentext an und führt keine arithmetische Addition aus.

Methode 3: Mehrere Zeichenketten verketten

Mehrere Variablenerweiterungen und Textliterale in Anführungszeichen können zusammen einen Wert bilden. Setzen Sie gewünschte Trenner an die passende Stelle:

first="Bash"
second="is"
third="great!"
combined="$first $second $third"
printf '%s\n' "$combined"

Die drei Erweiterungen werden der Reihe nach verbunden. Die beiden Leerzeichen im Zuweisungstext dienen als Trenner. Wenn das gewünschte Format keine Leerzeichen enthält, lassen Sie sie weg; Bash fügt nicht automatisch Trenner ein.

Methode 4: Zeichenketten in Schleifen verketten

Hängen Sie die einzelnen Elemente nacheinander an. Dieses Beispiel setzt zwischen die Elemente jeweils ein Leerzeichen und vermeidet dadurch ein abschließendes Leerzeichen:

result=""
separator=""
for word in "Learning" "Bash" "is" "fun"
do
    result+="${separator}${word}"
    separator=" "
done
printf '%s\n' "$result"

Das erste Element wird ohne Trenner angehängt. Nach jedem Element wird separator auf ein Leerzeichen gesetzt. Dadurch sind die folgenden Elemente getrennt, und der fertige Wert endet mit fun. Ersetzen Sie die Wörter in Anführungszeichen durch die Werte Ihrer Schleife. Wenn eingefügte Werte Leerzeichen oder Platzhalterzeichen enthalten können, setzen Sie ihre Erweiterungen ebenfalls in Anführungszeichen.

Methode 5: Befehlssubstitution verwenden

Bei der Befehlssubstitution mit $(...) wird ein Befehl ausgeführt und seine Standardausgabe in die umgebende Zuweisung eingesetzt:

name="John"
greeting="Hello, $(printf '%s' "$name")!"
printf '%s\n' "$greeting"

Die Ausgabe des Befehls wird zwischen Hello, und ! eingesetzt. Bei der Befehlssubstitution werden abschließende Zeilenumbruchzeichen aus der Ausgabe entfernt. Setzen Sie Werte innerhalb des Befehls und die resultierende Variable bei der Verwendung als Argument in Anführungszeichen.

Fazit

Um Zeichenketten in Bash zu verketten, schreiben Sie Werte in Anführungszeichen nebeneinander, fügen gewünschte Trenner ausdrücklich ein oder hängen mit += Text an einen vorhandenen Wert an. Eine Schleife kann das Anhängen wiederholen; mit $(...) lässt sich Befehlsausgabe einsetzen. Setzen Sie Erweiterungen bei der Übergabe an Befehle in Anführungszeichen, damit Leerzeichen und Platzhalterzeichen Teil des Werts bleiben.

Häufig gestellte Fragen

  1. Wie verkette ich zwei Zeichenketten in Bash?
    Weisen Sie direkt aufeinanderfolgende, in Anführungszeichen gesetzte Erweiterungen zu, zum Beispiel combined="${first}${second}", oder hängen Sie eine mit combined+="$second" an. Soll das Ergebnis ein Leerzeichen enthalten, nehmen Sie es in den Text in Anführungszeichen auf.

  2. Kann ich Zeichenketten in einer Schleife verketten?
    Ja. Hängen Sie jedes Element mit += an eine Ergebnisvariable an. Wenn der zusammengesetzte Wert Trenner benötigt, fügen Sie diese bewusst zwischen den Elementen ein.

  3. Was ist Befehlssubstitution in Bash?
    $(...) führt einen Befehl aus und setzt dessen Standardausgabe in den umgebenden Text ein. Abschließende Zeilenumbruchzeichen dieser Ausgabe werden entfernt.

  4. Wie ermittle ich die Länge einer Zeichenkette?
    Mit ${#value} erhalten Sie die Länge des Werts einer Bash-Variablen. Wie Zeichen gezählt werden, kann vom aktiven Gebietsschema abhängen; im Gebietsschema C werden Bytes gezählt.

  5. Kann ich Zeichenketten mit Sonderzeichen verketten?
    Ja. Doppelte Anführungszeichen erhalten Leerzeichen und verhindern bei Variablenwerten eine Platzhaltererweiterung. Shell-Syntax wie $, Backticks und Anführungszeichen muss beim wörtlichen Eingeben dennoch gegebenenfalls in Anführungszeichen gesetzt oder maskiert werden. Wählen Sie für beliebigen Text eine Zitierung, die verhindert, dass die Shell dessen Zeichen vor der Zuweisung interpretiert.