Wenn Sie eine POSIX-Shell verwenden,
%Vor%wird zu
erweitert %Vor% Was die Dateien quickly
, manly
und strongly
berührt, aber ist es möglich, die Erweiterung dynamisch zu erstellen? Das folgende Beispiel veranschaulicht, was ich tun möchte, funktioniert aber aufgrund der Reihenfolge der Erweiterung nicht:
Gibt es einen Weg, dies zu erreichen? Es macht mir nichts aus, mich auf Bash zu beschränken, wenn es sein muss. Ich möchte auch Schleifen vermeiden. Die Erweiterung sollte als vollständiges Argument für ein beliebiges beliebiges Programm angegeben werden (d. H. Das Programm kann nicht einmal für jede Datei aufgerufen werden, es kann nur einmal für alle Dateien aufgerufen werden). Ich weiß über xargs
, aber ich hoffe, dass alles irgendwie von der Shell aus erledigt werden kann.
... Es ist so viel falsch mit eval
. Was Sie fragen ist nur möglich mit eval
, ABER was Sie wollen ist leicht möglich, ohne auf bash bug-central zurückgreifen zu müssen.
Verwenden Sie Arrays! Wenn Sie mehrere Elemente im one -Datentyp aufbewahren müssen, müssen Sie (oder sollte verwenden) ein Array verwenden.
%Vor%Das tut genau das, was Sie wollen, ohne die tausend Bugs und Sicherheitsprobleme, die hier in den anderen Vorschlägen eingeführt und verborgen werden.
So funktioniert es:
"${foo[@]}"
: Erweitert das Array mit dem Namen foo
, indem jedes seiner Elemente in geeigneter Weise erweitert wird. Vergiss die Zitate nicht! ${foo/a/b}
: Dies ist eine Art von Parametererweiterung, die die erste a
in foo
Erweiterung durch eine b
ersetzt. Bei dieser Art der Erweiterung können Sie %
verwenden, um das Ende des erweiterten Werts zu symbolisieren , wie $
in regulären Ausdrücken. foo
erweitern, es als separates Argument angeben und das Ende jedes Elements durch ly
ersetzen. Tags und Links bash shell brace-expansion