A saída do comando abaixo é estranha para mim. Por que não me devolve o elemento 5?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4
Eu esperaria que '5' fosse retornado também. Em execução GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
. A adição de uma vírgula funciona, mas meus dados de entrada não têm uma vírgula. Estou esquecendo de algo?
fonte
read -d, i || [[ -n $i ]]
a la O quewhile read -r line || [[ -n $line ]]
significa?Como outras respostas afirmam,
-d
é um caractere de fim de linha, não um separador de campos. Você pode fazerfonte
Do homem:
Seu elemento 5 não possui um delimitador (vírgula), portanto não será lido.
fonte
O que você está vendo é o mesmo comportamento (e pelo mesmo motivo) de Por que esse loop 'while' não reconhece a última linha?
Como nesse caso, você pode modificar o comportamento adicionando um teste extra à condição de finalização do loop, da seguinte maneira
Ex.
fonte