Zdá se, že normální praxe by umístila nastavení IFS mimo smyčku while, aby se neopakovalo nastavování pro každou iteraci... Je to jen obvyklý styl „opice vidí, opice dělej“, jak tomu bylo u této opice, dokud jsem nečetl člověk , nebo mi tu chybí nějaká jemná (nebo zcela zjevná) past?
Přijatá odpověď:
Past je v tom
IFS=; while read..
nastaví IFS
pro celé prostředí shellu mimo smyčku, zatímco
while IFS= read
předefinuje jej pouze pro read
vyvolání (kromě Bourne shellu).
Můžete zkontrolovat, že uděláte smyčku jako
while IFS= read xxx; ... done
pak po takové smyčce echo "blabalbla $IFS ooooooo"
tiskne
blabalbla ooooooo
zatímco po
IFS=; read xxx; ... done
IFS
zůstane předefinováno:nyní echo "blabalbla $IFS ooooooo"
tiskne
blabalbla ooooooo
Takže pokud použijete druhý formulář, musíte si zapamatovat reset:IFS=$' tn'
.
Druhá část této otázky byla sloučena sem, takže jsem odtud odstranil související odpověď.