Usé el siguiente comando para crear una lista de URL que quiero probar:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Lamentablemente, las URL adjuntas a urls.txtcada una tenían un espacio antes (excepto la primera, por supuesto). Entiendo por qué sucedió eso, y me doy cuenta de que podría quitarlo con una sedexpresión, pero me gustaría saber si hay una forma de suprimirlo. (Puede parecer tonto y pedante, pero no es diferente de la preferencia que muchas personas sienten por no "abusar de los gatos" ).
Traté de dos comillas para suprimir la división de palabras , pero eso también suprimió la expansión de llaves, por lo que fue imposible.
Intenté cambiar IFS a una cadena vacía, pero tampoco funcionó:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Tampoco cambiarlo a una nueva línea:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
bash
zsh
brace-expansion
iconoclasta
fuente
fuente

Respuestas:
Puede almacenar la expansión de llaves en una matriz y luego generarla de la manera que elija:
Entonces
o
El ejemplo de eco se ve raro porque:
IFS=$'\n' echo "${urls[*]}"porque la variable se expande antes de que la nueva variable env entre en vigenciaAdemás, tenga en cuenta la sutil diferencia en el índice de matriz de referencia utilizado:
[@]en el ejemplo printf para expandir la matriz en palabras individuales[*]en el ejemplo echo para expandir la matriz en una sola palabra, con elementos separados por el primer carácter de IFSfuente
Use
printfincorporado:fuente
Esto está etiquetado como zsh, por lo que sugiero el zsh incorporado
print:-limprime argumentos en líneas separadas.fuente
El problema es que la expansión de la llave está agregando el espacio, y echo está agregando la nueva línea. Entonces, utilizando el principio de responsabilidad única, maneje la nueva línea por separado.
fuente
echo. Eso es loechoque imprime sus argumentos separados por espacios.echosepara los argumentos por espacios y la nueva línea se inserta adicionalmente antes de cada espacio en lugar de reemplazar el espacio (lo que sería más sensato). De memoria,xargstiene un problema conocido muy similar a este (especialmente con la-0opción)