¿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 :-)