navigation Navigation


Brace Expansion


Brace Expansion in Linux ist eine leistungsstarke Shell-Funktion, die es ermöglicht, in der Kommandozeile mehrere Strings in einer kompakten Form zu erzeugen. Diese Technik wird hauptsächlich in der bash-Shell verwendet, aber auch andere Shells wie zsh unterstützen sie.

Syntax

Die grundlegende Syntax für Brace Expansion sieht wie folgt aus.

{string1,string2,...}

Die Klammern {} enthalten eine durch Komma getrennte Liste von Strings. Wenn die Shell auf eine solche Konstruktion stößt, wird sie in jede mögliche Kombination der angegebenen Strings expandiert.

Beispiele

Einfachste Form der Brace Expansion

echo {a,b,c}

Dies erzeugt die Ausgabe a b c. Die Shell expandiert die Eingabe {a,b,c} zu a, b und c.


Brace Expansion mit Dateipfaden

touch file{1,2,3}.txt
ls file*.txt

Das Kommando touch{1,2,3}.txt erzeugt drei Dateien: file1.txt, file2.txt und file3.txt. Die Brace Expansion sorgt dafür, dass die Shell die Eingabe file{1,2,3}.txt zu file1.txt, file2.txt und file3.txt expandiert, die dann von touch erstellt werden.


Range Expansion - Zahlen

echo {1..5}

Dies erzeugt die Ausgabe “1 2 3 4 5”. Der Ausdruck wird zu allen Zahlen expandiert.


Range Expansion - Buchstaben

echo {a..e}

Dies erzeugt die Ausgabe “a b c d e”. Der Ausdruck wird zu allen Buchstaben von a bis e expandiert.


Range Expansion - Zahlen mit Schritten

echo {0..10..2}

Diese Anweisung erzeugt die Ausgabe “0 2 4 6 8 10”. Der Ausdruck wird zu den Zahlen von 0 bis 10 expandiert, wobei der Schritt zwischen den Zahlen 2 beträgt.


Kombination mit Variablen

prefix="file"
touch ${prefix}{1,2,3}.txt

In dieser Anweisung wird die Variable prefix mit Brace Expansion kombiniert. Die Shell ersetzt ${prefix} durch den Wert file, sodass file{1,2,3}.txt zu file1.txt, file2.txt und file3.txt expandiert wird.


Brace Expansion und Ordner

Diese Anweisung erstellt im aktuellen Ordner einen Ordner dir, in welchem dann der Reihe nach die Ordner subOne, subTwo und subThree erstellt werden.

Wenn man sich direkt nach dieser Anweisung die Ordner rekursiv anzeigt, sieht die Struktur folgendermaßen aus.

ls dir/*
dir/subOne:

dir/subTwo:

dir/subThree: