Para loop com entradas entre aspas

0

Um loop que percorre uma lista de cabeçalhos citados:

for h in "header" "header 2"; do
    echo $h
done

retorna

header
header 2

Gostaria de fazer referência aos cabeçalhos em outro lugar para limpá-lo, como atribuí-los a uma variável.

headers='"header" "header 2"'
for h in $headers; do
    echo $h
done

mas isso retorna

"header"
"header
2"

como deveria.

Existe uma maneira de contornar isso? É semelhante a este post com uma lista de arquivos com espaços, mas não estou fazendo arquivos, e gostaria de mantê-los em uma linha, pois haverá muitas entradas.

    
por Emerson Peters 01.12.2016 / 21:49

2 respostas

2

Outra maneira de fazer isso é alterar a variável separadora fiels como:

headers="header,header 2"
IFS=,
for h in $headers; do
        echo $h
done

Nota: Se você tiver outros loops que requeiram o valor IFS padrão, primeiro você poderá salvar o valor do IFS em uma variável temporária.

Veja também man bash e procure por IFS para mais informações.

    
por 01.12.2016 / 22:11
0

Eu percebi uma maneira de contornar isso é usar vírgulas (ou outra coisa) em vez de citações, e ir ao estilo csv. Agora é uma conversão simples para delimitados por linhas.

headers="header,header 2"
headers=$(echo $headers | sed 's/,/\n/g')
printf "$headers\n" | while read h; do
    echo $h
done

Ainda assim, se você tiver outras soluções mais elegantes, compartilhe.

    
por 01.12.2016 / 21:49

Tags