Posso usare variabili all'interno di {}
espansione senza fare appello a eval
? Se sì, come?
Questo non funziona:
$ 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
Funziona con eval
:
$ eval ls 1.{$extensions}
1.bar 1.foo
Risposta accettata:
L'espansione del tutore avviene molto presto durante l'espansione (prima cosa, infatti), prima dell'espansione variabile. Per eseguire l'espansione delle parentesi sul risultato di un'espansione di una variabile, è necessario utilizzare eval
.
Puoi ottenere lo stesso effetto senza eval
se fai extensions
un modello di caratteri jolly invece di un modello di parentesi graffe. Imposta il extglob
opzione per attivare modelli simili a ksh.
shopt -s extglob
extensions='@(foo|bar)'
ls 1.$extensions