GNU/Linux >> Tutoriales Linux >  >> Linux

Expansión de llaves:¿ejecutar varios comandos en lugar de expandirse en una línea?

¿Es esta solo una pregunta de "porque quiero saber", o hay un caso de uso real para ella? Podríamos hacer algo de gimnasia para lograrlo:

$ eval echo\ {a,b,c}\;
a
b
c

Pero cazaría a cualquiera que estuviera poniendo este tipo de comandos ofuscadores en las secuencias de comandos de nuestro sistema.

Por qué no optar por la claridad en su lugar:

$ for X in {a,b,c}; do echo $X; done

Incluso podrías ir por completo y poner un par de saltos de línea y sangrar un poco para que siempre puedas entender lo que estabas tratando de hacer.


Según la respuesta seleccionada de Mark Mann, pude derivar aún más este ejemplo, que funciona muy bien:

$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak

Lo que eso muestra es que cuando usa múltiples ocurrencias de expansión de llaves dentro de una línea, el ejemplo original de Mark habría impreso cada variación individualmente. En cambio, quería usar su respuesta para mover/renombrar varios archivos. Para asegurarse de que la salida coincida con el formato que mv normalmente espera (mv oldfilename newfilename ), escapé de la segunda aparición de la expansión de llaves, de modo que no se evaluaría hasta después el eval inicial el comando se había ejecutado.

Como el resultado anterior apareció como se esperaba, pude ejecutar el siguiente comando:

$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak  category_32.properties.bak  category_33.properties.bak

Muchas gracias a Mark por su respuesta original. Por favor, vota su respuesta si te gusta lo que su respuesta me permitió hacer :-)


Linux
  1. ¿Expansión y variables de Bash Brace?

  2. ¿Cómo parece que este comando Su -c “…” pasa dos comandos en lugar de uno?

  3. ¿Programación de comandos por inactividad del sistema?

  4. ¿Verificación de condición de una línea en Makefile?

  5. Tutorial de expansión de Bash Brace:6 ejemplos de expresiones de expansión dentro de llaves

Cómo ejecutar comandos de Linux en segundo plano

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo ejecutar comandos Sudo sin contraseña

Cómo ejecutar comandos sudo sin contraseña

Convertir JSON pretty print en una línea

¿Los comandos en un script bash se ejecutan en paralelo o uno tras otro?