Sembra che la pratica normale metta l'impostazione di IFS al di fuori del ciclo while per non ripetere l'impostazione per ogni iterazione... È solo uno stile abituale "scimmia guarda, scimmia fai", come è stato per questa scimmia fino a quando non ho letto uomo che legge , o mi sto perdendo qualche trappola sottile (o palesemente ovvia) qui?
Risposta accettata:
La trappola è quella
IFS=; while read..
imposta il IFS
per l'intero ambiente shell al di fuori del ciclo, mentre
while IFS= read
lo ridefinisce solo per il read
invocazione (tranne nella shell Bourne).
Puoi verificarlo facendo un ciclo come
while IFS= read xxx; ... done
quindi dopo tale ciclo, echo "blabalbla $IFS ooooooo"
stampe
blabalbla ooooooo
mentre dopo
IFS=; read xxx; ... done
il IFS
soggiorni ridefinito:ora echo "blabalbla $IFS ooooooo"
stampe
blabalbla ooooooo
Quindi, se usi il secondo modulo, devi ricordarti di reimpostare:IFS=$' tn'
.
La seconda parte di questa domanda è stata unita qui, quindi ho rimosso la relativa risposta da qui.