Wenn ich in zsh (und anderen Shells) ein Argument wie (zum Beispiel) einfüge:
{a,b,c}{d,e,f}
Klammererweiterung macht es in:
ad ae af bd be bf cd ce cf
Für meine Zwecke ist die Reihenfolge der Argumente wichtig, und ich brauche die geschweiften Klammern, um von rechts nach links anstatt von links nach rechts zu expandieren. Das heißt, ich möchte, dass die Erweiterung:
ad bd cd ae be ce af bf cf
Gibt es eine Möglichkeit, die Reihenfolge zu steuern, in der mehrere Sätze von Klammern erweitert werden? Ich suche etwas, das in jeder Situation funktioniert, nicht nur mit diesen Argumenten.
zsh
brace-expansion
Michael Mrozek
quelle
quelle
{a,b,c}{d,e,f}
nicht sehr hilfreichAntworten:
Sie können die Parametererweiterung mit der Klammererweiterung kombinieren.
Wenn Sie nicht
foo
separat definieren möchten (wie es wahrscheinlich erscheint), können Sie Folgendes verwenden:Wenn Sie die
rcexpandparam
Option festgelegt haben, benötigen Sie die^
in beiden Beispielen nicht, um dieses Verhalten zu aktivieren.(Hinweis: Während des Testens hatte ich auch die
shwordsplit
Option festgelegt. Wenn Sie sie nicht festgelegt haben, versuchen Sie es beispielsweiseecho {a,b,c}${^=:-d e f}
. Moral der Geschichte: In fast ist alles möglichzsh
, aber Sie müssen sicherstellen, dass Sie die richtige verwenden Kombination von Optionen und Syntax.)quelle
print -- {a,b,c}${^=:-d e f}
als Hauptbeispiel verwenden, da wannsplit+glob
standardmäßig in deaktiviert wurdezsh
.In können
zsh
Sie das-C
angegebene Argument für die Anzahl der Spalten verwenden, um Folgendes zuprint
mögen:...bekommen...
... ohne die
$IFS
Aufteilung wie folgt:... druckt ...
... aber du kannst das vorher machen wie ...
...oder...
quelle
foobad foobaz barbad barbaz
{foo, bar} {bad, baz} `?Sie können am Ende jedes Elements des zweiten Satzes eine Zahl einfügen und dann nach dem letzten Zeichen sortieren:
Noch besser wäre es, nach einem Trennzeichen (Leerzeichen) Zahlen hinzuzufügen, um Felder und keine Zeichen auszuschneiden:
quelle
In der
fish
Shell haben Sie standardmäßig dieses Verhalten, da die Erweiterung vonfish
rechts nach links erfolgt :quelle