¿Puedo usar variables dentro de {}
? expansión sin apelar a eval
? Si es así, ¿cómo?
Esto no funciona:
$ 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
Funciona con eval
:
$ eval ls 1.{$extensions}
1.bar 1.foo
Respuesta aceptada:
La expansión de la llave ocurre muy temprano durante la expansión (lo primero, de hecho), antes de la expansión variable. Para realizar una expansión de llaves en el resultado de una expansión variable, debe usar eval
.
Puede lograr el mismo efecto sin eval
si haces extensions
un patrón comodín en lugar de un patrón de llaves. Establecer el extglob
opción para activar patrones tipo ksh.
shopt -s extglob
extensions='@(foo|bar)'
ls 1.$extensions