Parece que la práctica normal colocaría la configuración de IFS fuera del ciclo while para no repetir la configuración para cada iteración... ¿Es esto solo un estilo habitual de "mono ve, mono hace", como lo ha sido para este mono hasta que leí hombre leyendo , ¿o me estoy perdiendo alguna trampa sutil (o descaradamente obvia) aquí?
Respuesta aceptada:
La trampa es que
IFS=; while read..
establece el IFS
para todo el entorno de shell fuera del bucle, mientras que
while IFS= read
lo redefine solo para read
invocación (excepto en el shell de Bourne).
Puedes comprobarlo haciendo un bucle como
while IFS= read xxx; ... done
luego, después de dicho ciclo, echo "blabalbla $IFS ooooooo"
impresiones
blabalbla ooooooo
mientras que después
IFS=; read xxx; ... done
el IFS
permanece redefinido:ahora echo "blabalbla $IFS ooooooo"
impresiones
blabalbla ooooooo
Entonces, si usa la segunda forma, debe recordar restablecer:IFS=$' tn'
.
La segunda parte de esta pregunta se fusionó aquí, por lo que eliminé la respuesta relacionada de aquí.