So verwenden Sie die Brace-Erweiterung in der Linux-Bash-Shell

Inhalt

Ein Terminalfenster auf einem Linux-System.

Die Klammererweiterung ist eine nützliche Technik zum Generieren von Stringlisten, die in Skripts und Aliasnamen und in der Linux-Befehlszeile verwendet werden können.. Sparen Sie Zeit und vermeiden Sie Fehler, indem Sie weniger tippen.

Klemmenerweiterung

Vor Bashs Shell einen Befehl ausführen in einem Terminalfenster oder einer Zeile in einem Skript, Überprüfen Sie, ob Sie im Befehl eine Ersetzung vornehmen müssen. Variablennamen werden durch ihre Werte ersetzt, Aliase werden durch die Befehle ersetzt, für die sie abgekürzt sind, und jede Erweiterung wird durchgeführt. Die Schlüsselerweiterung ist eine von Bash . unterstützte Form der Erweiterung.

Klemmenerweiterung ist bei modernen Gehäusen aktiviert, aber es ist möglich, dass es in einigen alten Fällen fehlt. Wenn Sie die Klammererweiterung in Ihren Skripten verwenden möchten, Stellen Sie sicher, dass Sie eine Shell aufrufen, die die Schlüsselerweiterung unterstützt, wie bash:

Wir werden Bash für unsere Beispiele verwenden.

Die Generierung von String-Listen scheint eher eine Neuheit als ein Vorteil zu sein, aber es bietet einige Funktionen, die Zeit und Tastenanschläge sparen können. Häufig, kann eine einfache und elegante Lösung für ein Hindernis oder eine Anforderung bieten.

Einfache Erweiterungen

Zwischen einem Tastenpaar ist eine Tastenerweiterung enthalten “{}”. Kann eine durch Kommas getrennte Liste von Elementen oder ein Bereichsbezeichner sein. Es sind keine Leerzeichen in den Schlüsseln zulässig, es sei denn, Sie haben die Kette in Anführungszeichen gesetzt “". “

Für eine durch Kommas getrennte Liste, die Expansionsprozedur nimmt jedes Element der Reihe nach und übergibt es an den Aufrufbefehl. In diesem Beispiel, es ist echo die sie einfach in das Terminalfenster druckt. Beachten Sie, dass Kommas ignoriert werden.

Echo {einer,zwei,drei,vier}

Eine Liste kann aus Wörtern oder Ziffern bestehen.

Echo {1,2,3,4}

Die Reihenfolge der Elemente in der Liste ist absolut willkürlich.

Echo (4,2,3,1)

Ein Erweiterungsbereich hat ein Start- und Endzeichen, das mit Doppelpunkten verbunden ist ” .. „Ohne Leerzeichen“. Erweiterung liefert automatisch alle fehlenden Listenelemente, so wird der gesamte Bereich vom Startzeichen bis zum Ende erstellt.

Dies druckt die Ziffern des 1 al 10.

Echo {1..10}

Die Nummerierung ist willkürlich. Du musst nicht bei einem anfangen.

Echo {3..12}

Bereiche können so angegeben werden, dass sie rückwärts laufen. Dadurch wird eine Fünf-zu-Eins-Liste erstellt.

Echo {5..1}

Bereiche können negative Zahlen enthalten.

Echo {4..-4}

Wie wir bereits erwähnt haben, ein Bereich hat einen Anfang und ein Ende Charakter. Es muss keine Zahl sein. Es kann ein Brief sein.

Echo {q..v}

Buchstaben können auch rückwärts gehen.

Echo {f.. An}

Verwenden der Korsetterweiterung in Schleifen

Sie können die Tastenerweiterung mit Schleifenbereichen in Skripts verwenden.

Für I in {3..7}
do
   echo $i
done

Mithilfe von Schlüsselerweiterungsbereichen können Sie Zeichen als Schleifenvariable verwenden.

Für I in {m..q}
do
   echo $i
done

Schleifen werden im Allgemeinen in Skripten verwendet, Aber es gibt nichts, was Sie davon abhalten könnte, sie in die Befehlszeile einzugeben, um zu sehen, was passiert.

Für I in {3..7}; echo $i; getan

Für I in {m..q}; echo $i; getan

Verkettung und Verschachtelung

Zwei benachbarte Erweiterungen agieren nicht unabhängig voneinander. Interoperabilität. Jedes Element der ersten Erweiterung wird von jedem Element der zweiten Erweiterung beaufschlagt..

Echo {q..v}{1..3}

Erweiterungen können auch verschachtelt werden. Eine verschachtelte Erweiterung wirkt sich auf das unmittelbar vorhergehende Element aus.

Echo {Teil-1,Teil-2{ein,B,C,D},Teil-3}

Außerdem können Sie Erweiterungen verschachteln, indem Sie eine durch Kommas getrennte Liste von Bereichserweiterungen erstellen.

Echo {{5..0},{1..5}}

Präambel und Nachwort

Sie können Text vor und nach einer Klammererweiterung platzieren, sodass dieser Text in den Erweiterungsergebnissen enthalten ist. Text, der vor einer Erweiterung steht, wird Präambel genannt, während der Text, der hinter einer geschweiften Erweiterung steht, als Nachschrift bezeichnet wird.

Dieser Befehl verwendet eine Präambel.

Echo Kapitel{1..3}

Dieses Beispiel verwendet ein Postscript:

Echo {Inhalt,Papier,Bibliographie}.md

Und dieser Befehl verwendet beides.

Echo Kapitel-{1..4}.md

Verzeichniserweiterung und Dateinamen

Wie ihr wahrscheinlich schon erraten habt, Eine der Hauptanwendungen von Klammererweiterungen besteht darin, Datei- und Verzeichnisnamen zu erstellen, die an andere Befehle übergeben werden können. Wir haben verwendet echo als bequeme Möglichkeit, genau zu sehen, was passiert, wenn eine Erweiterung ausgelöst wird. Sie können jeden Befehl ersetzen, der Datei- oder Verzeichnisnamen als Eingabe verwendet, und die Klammererweiterung damit verwenden.

So erstellen Sie schnell einige Dateien, verwenden touch:

Touch-Datei-{1..4}.TXT
ls *.txt

Wenn Sie viele Dateien mit demselben Basisnamen, aber unterschiedlichen Dateierweiterungen haben und eine Operation an einer Teilmenge davon ausführen möchten, wichtige Erweiterungen können dazu beitragen. Hier, Wir komprimieren eine Teilmenge von Dateien, die sie haben “Programm” als Basisname in einer ZIP-Datei mit dem Namen “Quellcode.zip”.

Entwicklungsverzeichnisse enthalten viele Dateien, die denselben Basisnamen wie ihr Hauptprogramm haben. Wie gewöhnlich, Sie möchten Dateien nicht als Objektdateien sichern oder verteilen “.Ö”. Dies ist eine einfache Möglichkeit, nur die gewünschten Dateitypen einzuschließen..

ZIP-Quellcode-Programm{.C,.h,.CSS}

Dieser Befehl erstellt eine Kopie einer Datei und fügt sie hinzu “.Bak”, Sichern der Originaldatei. Ein interessanter Punkt, auf den Sie achten sollten, ist, dass die Schlüsselerweiterung eine durch Kommas getrennte Liste enthält., aber das erste Element ist leer. Wenn wir das Komma nicht eingefügt hätten, Expansion hätte nicht stattgefunden.

CP Klammer / Neu / PROG-1.c{,.Bak}
LS Brace/Neu/PROG-1.c.bak

So führen Sie eine beliebige Aktion für zwei Dateien in verschiedenen Verzeichnissen aus, Wir können eine Schlüsselerweiterung im Pfad zu den Dateien verwenden.

In diesem Beispiel, das Verzeichnis “Stütze” enthält zwei Unterverzeichnisse, eine namens “Neu” und noch ein Anruf “uralt”. Sie enthalten verschiedene Versionen desselben Satzes von Quellcodedateien. Wir werden die verwenden diff -Programm, um die Unterschiede zwischen den beiden Versionen von “Prog-1.c”

Differenzialstütze/{Neu,alt}/prog-1.c

Wenn Sie ein Standardverzeichnisskelett haben, das Sie zu Beginn eines Projekts erstellen müssen, Sie können sie schnell mit der Tastenerweiterung erstellen. das mkdir -p Möglichkeit (Papa) Fehlende übergeordnete Verzeichnisse erstellen beim Erstellen eines Unterverzeichnisses.

mkdir -p {Quelle,bauen,Mann,Hilfe{/Seiten,/jaulen,/Bilder}}
Baum

Sie können die Korsetterweiterung mit verwenden wget damit mehrere Dateien herunterladen.

In diesem Befehl, Wir werden Dateien aus zwei Verzeichnissen herunterladen, namens “Test1” und “Test2”. Jedes Verzeichnis enthält zwei Dateien mit dem Namen “Bild1” e “Bild2”.

wget https://www.URL-Ihrer-Wahl.com/test{1,2}/Bild{001,002}.jpg

Dateien auflisten zeigt die Dateien, die wiederhergestellt wurden und wie wget Benennen Sie Dateien um, um Namenskonflikte mit bestehenden Dateien zu vermeiden.

ls Bild*.*

Klemmen Sie die Klemme fest

Es scheint, dass die Schlüsselerweiterung ein weiteres der bestgehüteten Geheimnisse von Linux ist. Viele Leute sagen mir, dass sie noch nie von einer Schlüsselerweiterung gehört haben, während andere mir mitteilen, dass es einer ihrer Lieblings-Kommandozeilen-Tricks ist.

Probieren Sie es aus und vielleicht finden Sie sich in Ihren Befehlszeilen-Tricks zurecht.

Abonnieren Sie unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.