Antworten:
Ist dies nur eine Frage, "weil ich es wissen will", oder gibt es einen echten Anwendungsfall dafür? Wir könnten ein bisschen 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 Klarheit schaffen:
$ for X in {a,b,c}; do echo $X; done
Sie könnten sogar ein paar Zeilenumbrüche einfügen und ein wenig einrücken, damit Sie immer verstehen, was Sie versucht haben.
for
funktioniert dafür, aber es wird noch mehr
eval git branch -d \{ branch-a, branch-b }\;
Basierend auf Mark Manns ausgewählter Antwort konnte ich dieses Beispiel weiter ableiten, was großartig 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
Wenn Sie mehrere Klammererweiterungen innerhalb einer Linie verwenden, hätte Marks ursprüngliches Beispiel jede Variation einzeln gedruckt. Stattdessen wollte ich seine Antwort verwenden, um mehrere Dateien zu verschieben / umzubenennen. Um sicherzustellen, dass die Ausgabe dem Format entspricht, das mv
normalerweise erwartet wird ( mv oldfilename newfilename
), habe ich das zweite Auftreten der Klammererweiterung vermieden, sodass sie erst nacheval
Ausführung des ersten Befehls ausgewertet wird .
Da die obige Ausgabe wie erwartet angezeigt wurde, 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 ab, wenn Ihnen gefällt, was seine Antwort mir erlaubt hat :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
ist es besser, die Kurzform zu verwenden, als alle 27 Werte aufzulisten.