Usei o seguinte comando para criar uma lista de URLs que quero testar:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Infelizmente, os URLs anexados a urls.txt
cada um tinham um espaço antes deles (exceto o primeiro, é claro). Entendo por que isso aconteceu, e percebo que poderia simplesmente despejá-lo através de uma sed
expressão, mas gostaria de saber se há uma maneira de suprimi-lo. (Pode parecer bobo e pedante, mas não é diferente da preferência que muitas pessoas sentem por não "abusar de gatos" .)
Tentei citar duas vezes para suprimir a divisão de palavras , mas isso também suprimiu a expansão da cinta, de modo que era impossível.
Tentei alterar o IFS para uma sequência vazia, mas também não funcionou:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Nem alterá-lo para uma nova linha:
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
fonte
fonte
Respostas:
Você pode armazenar a expansão de chave em uma matriz e, em seguida, produzi-la da maneira que você escolher:
Então
ou
O exemplo de eco parece estranho porque:
IFS=$'\n' echo "${urls[*]}"
porque a variável é expandida antes que a nova variável env entre em vigorAlém disso, observe a diferença sutil no índice da matriz de desreferenciamento usado:
[@]
no exemplo printf para expandir a matriz em palavras individuais[*]
no exemplo de eco para expandir a matriz em uma única palavra, com elementos separados pelo primeiro caractere do IFSfonte
Use
printf
builtin:fonte
Isso está marcado como zsh, então sugiro o zsh embutido
print
:-l
imprime argumentos em linhas separadas.fonte
O problema é que a expansão de chaves está adicionando espaço e o eco está adicionando a nova linha. Portanto, usando o princípio de responsabilidade única, lide com a nova linha separadamente.
fonte
echo
. É issoecho
que imprime seus argumentos separados por espaços.echo
separa argumentos por espaços e a nova linha é inserida adicionalmente antes de cada espaço, em vez de substituir o espaço (o que seria mais sensato). De memória,xargs
tem um problema conhecido muito semelhante a esta (especialmente com a-0
opção)