Bash String-Operationen

6 Operationen
Die wichtigsten String-Operationen in Bash: Länge · Substring · Ersetzen · Splitten · Groß-/Kleinschreibung · Trimmen Mit diesen Operationen können Sie Texte in Bash-Skripten analysieren, manipulieren und formatieren – unverzichtbar für die Automatisierung und Textverarbeitung.

Länge – Stringlänge ermitteln

${#var}
${#var}

Mit ${#var} ermitteln Sie die Anzahl der Zeichen eines Strings – inklusive Leerzeichen und Sonderzeichen.

Beispiele
text="Hallo Welt"
laenge=${#text}
echo "Länge: $laenge"
leer=""
echo "Leerer String: ${#leer}"
Ausgabe:
Länge: 10
Leerer String: 0
Tipp: Verwenden Sie ${#var} in Bedingungen, um zu prüfen, ob eine Variable leer ist: if [[ ${#var} -eq 0 ]]; then ...

Substring – Teilstring extrahieren

${var:start:länge}
${var:start:länge}

Mit ${var:start:länge} extrahieren Sie einen Teilstring – beginnend bei start (0-basiert) mit der angegebenen länge.

Beispiele für Offset und Länge

Syntax Beschreibung
${var:0:5} Erste 5 Zeichen
${var:6} Ab Position 6 bis zum Ende
${var: -5} Letzte 5 Zeichen (Achtung: Leerzeichen vor -)
${var: -5:3} 3 Zeichen ab Position 5 vor dem Ende
Beispiele
text="Hallo Welt"
echo "${text:0:5}" # Hallo
echo "${text:6}" # Welt
echo "${text: -4}" # Welt
echo "${text: -4:2}" # We
Ausgabe:
Hallo
Welt
Welt
We
Achtung: Beim Zugriff auf die letzten Zeichen mit ${var: -n} ist ein Leerzeichen zwischen : und - erforderlich! Sonst wird es als anderer Parameter interpretiert.

Ersetzen – Zeichenketten ersetzen

${var/alt/neu}
${var/alt/neu}

Mit ${var/alt/neu} ersetzen Sie das erste Vorkommen von alt durch neu. Mit // werden alle Vorkommen ersetzt.

Ersetzungs-Varianten

Syntax Beschreibung
${var/alt/neu} Erstes Vorkommen von alt durch neu ersetzen
${var//alt/neu} Alle Vorkommen von alt durch neu ersetzen
${var/#alt/neu} Nur ersetzen, wenn alt am Anfang steht
${var/%alt/neu} Nur ersetzen, wenn alt am Ende steht
Beispiele
text="Hallo Welt Welt"
echo "${text/Welt/Erde}" # Hallo Erde Welt
echo "${text//Welt/Erde}" # Hallo Erde Erde
echo "${text/#Hallo/Moin}" # Moin Welt Welt
echo "${text/%Welt/Erde}" # Hallo Welt Erde
# Leerzeichen ersetzen
pfad="Mein Dokumente"
pfad=${pfad// /_}
echo "$pfad" # Mein_Dokumente
Ausgabe:
Hallo Erde Welt
Hallo Erde Erde
Moin Welt Welt
Hallo Welt Erde
Mein_Dokumente
Tipp: Mit ${var/ /_} ersetzen Sie Leerzeichen durch Unterstriche – praktisch für die Umwandlung von Dateinamen.

Splitten – String in Array aufteilen

IFS=Trennzeichen; read -ra array <<< "$var"
IFS=',' read -ra array <<< "$var"

Mit IFS (Internal Field Separator) und read -ra können Sie einen String anhand eines Trennzeichens in ein Array aufteilen.

Wichtige Konzepte

Konzept Beschreibung
IFS=',' Trennzeichen auf Komma setzen
read -ra array Liest in Array (a = indexed, r = raw)
<<< "$var" Here-String: Übergibt Variable als Eingabe
${#array[@]} Anzahl der Elemente
${array[0]} Erstes Element
Beispiele
daten="Apfel,Birne,Kirsche"
IFS=',' read -ra fruits <<< "$daten"
echo "Erste Frucht: ${fruits[0]}"
echo "Zweite Frucht: ${fruits[1]}"
# Mit Leerzeichen als Trennzeichen
words="eins zwei drei vier"
IFS=' ' read -ra word_array <<< "$words"
echo "Anzahl: ${#word_array[@]}"
# Über das Array iterieren
for item in "${fruits[@]}"; do
  echo "Frucht: $item"
done
Ausgabe:
Erste Frucht: Apfel
Zweite Frucht: Birne
Anzahl: 4
Frucht: Apfel
Frucht: Birne
Frucht: Kirsche
Tipp: Vergessen Sie nicht, IFS nach dem Splitten wieder zurückzusetzen, wenn Sie das Standardverhalten benötigen: IFS=$' \t\n'

Groß-/Kleinschreibung – Case-Konvertierung

${var^^} / ${var,,}
${var^^} # GROSSBUCHSTABEN
${var,,} # kleinbuchstaben

Mit ^^ und ,, konvertieren Sie einen String in Groß- oder Kleinbuchstaben. Es gibt auch Varianten für einzelne Zeichen.

Case-Optionen

Syntax Beschreibung
${var^^} Alles in GROSSBUCHSTABEN
${var,,} Alles in kleinbuchstaben
${var^} Nur erster Buchstabe groß
${var,} Nur erster Buchstabe klein
${var^^[aeiou]} Nur Vokale in Großbuchstaben
Beispiele
text="Hallo Welt"
echo "${text^^}" # HALLO WELT
echo "${text,,}" # hallo welt
echo "${text^}" # Hallo Welt (bleibt gleich)
name="max"
name=${name^}
echo "$name" # Max
# Nur bestimmte Buchstaben umwandeln
text="Hallo Welt"
echo "${text^^[aeiou]}" # HAllO WElT
Ausgabe:
HALLO WELT
hallo welt
Hallo Welt
Max
HAllO WElT
Tipp: Die Case-Konvertierung ist perfekt für Vergleiche, die nicht case-sensitiv sein sollen: if [[ ${var,,} == "ja" ]]; then ...

Trimmen – Leerzeichen entfernen

${var##* } / ${var% *}
${var##*( )} # Führende Leerzeichen entfernen
${var%%( )*} # Nachfolgende Leerzeichen entfernen

Mit ## und %% können Sie Muster vom Anfang (Präfix) oder Ende (Suffix) eines Strings entfernen – ideal zum Trimmen von Leerzeichen.

Trim-Varianten

Syntax Beschreibung
${var#*( )} Entfernt führende Leerzeichen (kurzeste Übereinstimmung)
${var##*( )} Entfernt führende Leerzeichen (längste Übereinstimmung)
${var%*( )} Entfernt nachfolgende Leerzeichen (kurzeste Übereinstimmung)
${var%%*( )} Entfernt nachfolgende Leerzeichen (längste Übereinstimmung)
echo "$var" | xargs Beide Seiten trimmen (mit xargs)
Beispiele
text=" Hallo Welt "
# Führende Leerzeichen entfernen
text=${text##*( )}
echo "|$text|" # |Hallo Welt |
# Nachfolgende Leerzeichen entfernen
text=" Hallo Welt "
text=${text%%*( )}
echo "|$text|" # | Hallo Welt|
# Beide Seiten trimmen (mit xargs)
text=" Hallo Welt "
text=$(echo "$text" | xargs)
echo "|$text|" # |Hallo Welt|
# Alternative: sed verwenden
text=$(echo "$text" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
Ausgabe:
|Hallo Welt |
| Hallo Welt|
|Hallo Welt|
Tipp: Für einfaches Trimmen beider Seiten ist echo "$var" | xargs die einfachste Lösung. Für reine Bash-Lösungen verwenden Sie die Parameter-Expansion mit ## und %%.

Quick Summary

${#var}
Länge
${var:0:5}
Substring
${var/alt/neu}
Ersetzen
IFS read -ra
Splitten
${var^^}
Groß-/Kleinschreibung
${var##*( )}
Trimmen