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.