GNU/Linux >> Tutoriales Linux >  >> Linux

¿Usar variables dentro de la expansión {} sin `eval`?

¿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

Linux
  1. ¿Permitir que un usuario use Sudo sin una contraseña?

  2. ¿Usar expansión de parámetros para modificar la salida de otra expansión?

  3. ¿Expansión y variables de Bash Brace?

  4. ¿Usar Ts sin perder el valor de salida?

  5. ¿Por qué la expansión variable sin $ funciona en expresiones?

Cómo usar variables en Ansible Playbook

Cómo usar variables en secuencias de comandos de Shell

Cómo usar ISPConfig y Seafile sin modificaciones manuales de archivos

Cómo usar el comando echo sin nueva línea

Cómo usar "yum downloadonly" para descargar un paquete sin instalarlo

¿Cómo usar Linux Bash Shell dentro de Windows 10?