El resultado del comando a continuación es extraño para mí. ¿Por qué no me devuelve el elemento 5?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4
Esperaría que '5' sea devuelto también. Correr GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
. Agregar una coma funciona, pero mis datos de entrada no tienen una coma. ¿Me estoy perdiendo de algo?
fuente
read -d, i || [[ -n $i ]]
a la ¿Quéwhile read -r line || [[ -n $line ]]
significa?Como dicen otras respuestas,
-d
es un carácter de fin de línea, no un separador de campo. Tu puedes hacerfuente
Del hombre:
Su elemento 5 no tiene un delimitador (coma), por lo que no se leerá.
fuente
Lo que está viendo es el mismo comportamiento (y por la misma razón) que ¿Por qué este bucle 'while' no reconoce la última línea?
Como en ese caso, puede modificar el comportamiento agregando una prueba adicional a la condición de terminación del bucle, de la siguiente manera
Ex.
fuente