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 :-)