Iterando a string de múltiplas linhas armazenada na variável

15

Eu leia que é ruim escrever coisas como for line in $(command) , a maneira correta parece ser:

command | while IFS= read -r line; do echo $line; done

Isso funciona muito bem. Mas e se o que eu quero repetir é o conteúdo de uma variável , não o resultado direto de um comando?

Por exemplo, imagine que você crie o seguinte arquivo quickfox :

The quick brown
foxjumps\ over -
the
lazy ,
dog.

Gostaria de poder fazer algo assim:

# This is just for the example,
# I could of course stream the contents to 'read'
variable=$(cat quickfox);
while IFS= read -r line < $variable; do echo $line; done; # this is incorrect
    
por Sheljohn 11.04.2016 / 21:12

1 resposta

15

Em shells modernos como bash e zsh, você tem um muito útil '< < <' redirecionador que aceita uma string como uma entrada. Então você faria

while IFS= read -r line ; do echo $line; done <<< "$variable"

Caso contrário, você sempre pode fazer

echo "$variable" | while IFS= read -r line ; do echo $line; done
    
por 11.04.2016 / 21:15

Tags