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.txt
cada 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 sed
expresió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
printf
incorporado:fuente
Esto está etiquetado como zsh, por lo que sugiero el zsh incorporado
print
:-l
imprime 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 loecho
que imprime sus argumentos separados por espacios.echo
separa 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,xargs
tiene un problema conocido muy similar a este (especialmente con la-0
opción)