GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Klammererweiterung:Mehrere Befehle ausführen, anstatt eine Zeile zu erweitern?

Ist das nur eine "weil ich es wissen will"-Frage oder gibt es einen echten Anwendungsfall dafür? Wir könnten etwas Gymnastik machen, um es zu erledigen:

$ eval echo\ {a,b,c}\;
a
b
c

Aber ich würde jeden jagen, der diese Art von verschleierten Befehlen in unsere Systemskripte einfügt.

Warum nicht stattdessen für Klarheit sorgen:

$ for X in {a,b,c}; do echo $X; done

Sie könnten sogar aufs Ganze gehen und ein paar Zeilenumbrüche einfügen und es ein wenig einrücken, damit Sie immer verstehen, was Sie zu tun versuchten.


Basierend auf der ausgewählten Antwort von Mark Mann konnte ich dieses Beispiel weiter ableiten, das hervorragend funktioniert:

$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak

Was das zeigt, ist, wenn Sie mehrere Vorkommen der geschweiften Erweiterung innerhalb einer Zeile verwenden, würde Marks ursprüngliches Beispiel jede Variation einzeln gedruckt haben. Stattdessen wollte ich seine Antwort verwenden, um mehrere Dateien zu verschieben/umzubenennen. Um sicherzustellen, dass die Ausgabe dem Format entspricht, das mv erwartet normalerweise (mv oldfilename newfilename ), habe ich das zweite Vorkommen der geschweiften Erweiterung maskiert, sodass es erst nach ausgewertet wird die anfängliche eval Befehl wurde ausgeführt.

Da die obige Ausgabe wie erwartet erschien, konnte ich den folgenden Befehl ausführen:

$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak  category_32.properties.bak  category_33.properties.bak

Vielen Dank an Mark für seine ursprüngliche Antwort. Bitte stimmen Sie seine Antwort positiv ab, wenn Sie mögen, was seine Antwort mir ermöglicht hat :-)


Linux
  1. Wie scheint dieser Befehl su -c „…“ zwei Befehle anstelle von einem zu übergeben?

  2. Befehle nach Systeminaktivität planen?

  3. Bash Brace Expansion Tutorial:6 Beispiele zum Erweitern von Ausdrücken in geschweiften Klammern

  4. Wie kann ich Perl-One-Liner-Befehlszeilenskripts ordnungsgemäß ausführen?

  5. Werden Befehle in einem Bash-Skript parallel oder nacheinander ausgeführt?

So führen Sie Linux-Befehle im Hintergrund aus

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie Sudo-Befehle ohne Passwort aus

Bash Brace Erweiterung &Variablen?

Wie führe ich mehrere Befehle aus, die &in einer Befehlszeile haben?

So führen Sie sudo-Befehle ohne Passwort aus