Kann ich Variablen innerhalb von {}
verwenden Erweiterung ohne Aufruf von eval
? Wenn ja, wie?
Das funktioniert nicht:
$ touch 1.foo 1.bar
$ ls 1.{foo,bar}
1.bar 1.foo
$ extensions=foo,bar
$ ls 1.{$extensions}
ls: cannot access 1.{foo,bar}: No such file or directory
Es funktioniert mit eval
:
$ eval ls 1.{$extensions}
1.bar 1.foo
Akzeptierte Antwort:
Die Klammerexpansion findet sehr früh während der Expansion statt (tatsächlich als erstes), vor der Variablenexpansion. Um das Ergebnis einer Variablenerweiterung mit geschweiften Klammern auszuführen, müssen Sie eval
verwenden .
Sie können den gleichen Effekt auch ohne eval
erzielen wenn Sie extensions
machen ein Wildcard-Muster anstelle eines geschweiften Musters. Setzen Sie den extglob
Option zum Aktivieren von ksh-ähnlichen Mustern.
shopt -s extglob
extensions='@(foo|bar)'
ls 1.$extensions