Verwendung der Klammererweiterung in der Bash-Shell von Linux 1

Verwendung der Klammererweiterung in der Bash-Shell von Linux

Ein Terminalfenster auf einem Linux-System.

Die Klammererweiterung ist eine nützliche Technik zum Generieren von Listen mit Zeichenfolgen, die in Skripten und Aliasen sowie in der Linux-Befehlszeile verwendet werden können. Sparen Sie Zeit und vermeiden Sie Fehler, indem Sie weniger eingeben.

Klammererweiterung

Vor der Bash-Shell führt einen Befehl aus In einem Terminalfenster oder einer Zeile in einem Skript wird geprüft, ob der Befehl ersetzt werden muss. Variablennamen werden durch ihre Werte ersetzt, Aliase werden durch die Befehle ersetzt, für die sie eine Abkürzung verwenden, und jede Erweiterung wird ausgeführt. Die Klammererweiterung ist eine Form der Erweiterung, die von Bash unterstützt wird.

Die Klammererweiterung ist in modernen Schalen verfügbar, fehlt jedoch möglicherweise in einigen alten Schalen. Wenn Sie die Klammererweiterung in Skripten verwenden möchten, stellen Sie sicher, dass Sie eine Shell aufrufen, die die Klammererweiterung unterstützt, z. B. Bash:

#!/bin/bash

Wir werden Bash für unsere Beispiele verwenden.

Das Generieren von Zeichenfolgenlisten scheint eher eine Neuheit als ein Vorteil zu sein, bietet jedoch einige Funktionen, die Zeit und Tastenanschläge sparen können. Oft kann es eine einfache und elegante Lösung für ein Problem oder eine Anforderung bieten.

Einfache Erweiterungen

Eine Klammererweiterung ist zwischen einem Paar Klammern „{}“ enthalten. Dies kann eine Liste von durch Kommas getrennten Elementen oder ein Bereichsspezifizierer sein. Leerzeichen in Klammern sind nur zulässig, wenn Sie die Zeichenfolge in Anführungszeichen gesetzt haben. “". ”

Bei einer durch Kommas getrennten Liste nimmt der Erweiterungsprozess jedes Element der Reihe nach und übergibt es an den aufrufenden Befehl. In diesem Beispiel ist es echo das druckt sie einfach im Terminalfenster. Beachten Sie, dass die Kommas ignoriert werden.

echo {one,two,three,four}

Eine Liste kann aus Wörtern oder Ziffern bestehen.

echo {1,2,3,4}

Die Reihenfolge der Listenelemente ist völlig beliebig.

echo (4,2,3,1)

Verwendung der Klammererweiterung in der Bash-Shell von Linux 2

Ein Erweiterungsbereich hat einen Start- und einen Endcharakter, die mit zwei Perioden verbunden sind. “ .. ”Ohne Leerzeichen. Alle fehlenden Listenelemente werden von der Erweiterung automatisch bereitgestellt, sodass der gesamte Bereich vom Startzeichen bis zum Endzeichen erstellt wird.

Dadurch werden die Ziffern von 1 bis 10 gedruckt.

echo {1..10}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 3

Die Nummerierung ist beliebig. Es muss nicht um eins beginnen.

echo {3..12}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 4

Bereiche können so angegeben werden, dass sie rückwärts laufen. Dadurch wird eine Liste von fünf bis eins erstellt.

echo {5..1}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 5

Bereiche können negative Zahlen enthalten.

echo {4..-4}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 6

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

echo {q..v}

Die Buchstaben können auch rückwärts laufen.

echo {f..a}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 7

Verwenden der Klammererweiterung mit Schleifen

Sie können die Klammererweiterung mit Bereichen in Schleifen in Skripten verwenden.

for i in {3..7}
do
   echo $i
done

In Klammererweiterungsbereichen können Sie Zeichen als Schleifenvariable verwenden.

for i in {m..q}
do
   echo $i
done

Schleifen werden normalerweise in Skripten verwendet, aber nichts hindert Sie daran, sie in die Befehlszeile einzugeben, um zu sehen, was passieren wird.

for i in {3..7}; do echo $i; done

Verwendung der Klammererweiterung in der Bash-Shell von Linux 8

for i in {m..q}; do echo $i; done

Verwendung der Klammererweiterung in der Bash-Shell von Linux 9

Verketten und Verschachteln

Zwei benachbarte Erweiterungen wirken nicht unabhängig voneinander nacheinander. Sie arbeiten zusammen. Jedes Element in der ersten Erweiterung wird von jedem Element in der zweiten Erweiterung bearbeitet.

echo {q..v}{1..3}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 10

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

echo {part-1,part-2{a,b,c,d},part-3}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 11

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

echo {{5..0},{1..5}}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 12

Präambel und Nachschrift

Sie können Text vor und nach einer Klammererweiterung platzieren, um diesen Text in die Ergebnisse der Erweiterung aufzunehmen. Text, der vor einer Erweiterung steht, wird als Präambel bezeichnet, während Text, der hinter einer Klammererweiterung steht, als Postskriptum bezeichnet wird.

Dieser Befehl verwendet eine Präambel.

echo chapter{1..3}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 13

In diesem Beispiel wird ein Postscript verwendet:

echo {contents,paper,bilbiography}.md

Verwendung der Klammererweiterung in der Bash-Shell von Linux 14

Und dieser Befehl verwendet beide.

echo chapter-{1..4}.md

Verwendung der Klammererweiterung in der Bash-Shell von Linux 15

Erweitern von Dateinamen und Verzeichnissen

Wie Sie wahrscheinlich inzwischen erraten haben, besteht eine der Hauptanwendungen von Klammererweiterungen 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 Dateinamen oder Verzeichnisnamen als Eingabe verwendet, und die Klammererweiterung verwenden.

Verwenden Sie zum schnellen Erstellen einiger Dateien touch::

touch file-{1..4}.txt
ls *.txt

Verwendung der Klammererweiterung in der Bash-Shell von Linux 16

Wenn Sie viele Dateien mit demselben Basisnamen, aber unterschiedlichen Dateierweiterungen haben und eine Operation für eine Teilmenge davon ausführen möchten, können Klammererweiterungen hilfreich sein. Hier komprimieren wir eine Teilmenge von Dateien, deren Basisname „Programm“ ist, in eine ZIP-Datei mit dem Namen „Quellcode.zip“.

Entwicklungsverzeichnisse enthalten viele Dateien, die denselben Basisnamen wie Ihr Hauptprogramm haben. Normalerweise möchten Sie keine Dateien wie „.o“ -Objektdateien sichern oder verteilen. Dies ist eine gute Möglichkeit, nur die interessierenden Dateitypen einzuschließen.

zip source-code program{.c,.h,.css}

Verwendung der Klammererweiterung in der Bash-Shell von Linux 17

Dieser Befehl erstellt eine Kopie einer Datei und hängt „.bak“ an diese an, wodurch eine Sicherungskopie der Originaldatei erstellt wird. Ein interessanter Punkt ist, dass die Klammererweiterung eine durch Kommas getrennte Liste enthält, das erste Element jedoch leer ist. Wenn wir das Komma nicht eingefügt hätten, hätte die Erweiterung nicht stattgefunden.

cp brace/new/prog-1.c{,.bak}
ls brace/new/prog-1.c.bak

Verwendung der Klammererweiterung in der Bash-Shell von Linux 18

Um eine Aktion für zwei Dateien in verschiedenen Verzeichnissen auszuführen, können Sie eine Klammererweiterung im Pfad zu den Dateien verwenden.

In diesem Beispiel enthält das Verzeichnis „Klammer“ zwei Unterverzeichnisse, eines mit dem Namen „neu“ und eines mit dem Namen „alt“. Sie enthalten verschiedene Versionen desselben Satzes von Quellcodedateien. Wir werden das benutzen diff Programm, um die Unterschiede zwischen den beiden Versionen von „prog-1.c“ zu sehen.

diff brace/{new,old}/prog-1.c

Verwendung der Klammererweiterung in der Bash-Shell von Linux 19

Wenn Sie über ein Standard-Skelett von Verzeichnissen verfügen, die Sie zu Beginn eines Projekts erstellen müssen, können Sie diese mithilfe der Klammererweiterung schnell erstellen. Das mkdir -p (übergeordnete) Option Erstellt fehlende übergeordnete Verzeichnisse wenn ein untergeordnetes Verzeichnis erstellt wird.

mkdir -p {source,build,man,help{/pages,/yelp,/images}}
tree

Verwendung der Klammererweiterung in der Bash-Shell von Linux 20

Sie können die Klammererweiterung mit verwenden wget zu Laden Sie mehrere Dateien herunter.

In diesem Befehl werden Dateien aus zwei Verzeichnissen heruntergeladen, die als „test1“ und „test2“ bezeichnet werden. Jedes Verzeichnis enthält zwei Dateien mit den Namen „Bild1“ und „Bild2“.

wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg

Verwendung der Klammererweiterung in der Bash-Shell von Linux 21

Das Auflisten der Dateien zeigt Ihnen, welche Dateien abgerufen wurden und wie wget Benennt Dateien um, um Namenskonflikte mit vorhandenen Dateien zu vermeiden.

ls picture*.*

Verwendung der Klammererweiterung in der Bash-Shell von Linux 22

Umarme die Zahnspange

15 Sonderzeichen, die Sie für Bash kennen müssen

VERBUNDEN15 Sonderzeichen, die Sie für Bash kennen müssen

Es scheint, dass die Erweiterung der Zahnspange ein weiteres bestgehütetes Geheimnis von Linux ist. Viele Leute sagen mir, dass sie noch nie von einer Klammererweiterung gehört haben, während andere mir mitteilen, dass dies einer ihrer bevorzugten Kommandozeilen-Tricks ist.

Probieren Sie es aus und es könnte seinen Weg in Ihre Befehlszeilen-Tricks finden.

Unterstützen Sie unsere Arbeit ❤️

Wenn Ihnen dieser Artikel gefallen hat, können Sie uns mit einem Trinkgeld unterstützen, damit wir weiterhin großartige Inhalte veröffentlichen können.

Sichere Zahlung mit PayPal