Es scheint, dass die normale Praxis die Einstellung von IFS außerhalb der While-Schleife platzieren würde, um die Einstellung nicht für jede Iteration zu wiederholen … Ist dies nur ein gewohnheitsmäßiger „Affen sehen, Affen tun“-Stil, wie er für diesen Affen war, bis ich ihn gelesen habe Mann liest , oder übersehe ich hier eine subtile (oder offensichtliche) Falle?
Akzeptierte Antwort:
Die Falle ist das
IFS=; while read..
setzt den IFS
für die gesamte Shell-Umgebung außerhalb der Schleife, wohingegen
while IFS= read
definiert es nur für read
neu Aufruf (außer in der Bourne-Shell).
Sie können das überprüfen, indem Sie eine Schleife wie
while IFS= read xxx; ... done
dann nach einer solchen Schleife echo "blabalbla $IFS ooooooo"
druckt
blabalbla ooooooo
wohingegen nach
IFS=; read xxx; ... done
das IFS
bleibt neu definiert:jetzt echo "blabalbla $IFS ooooooo"
druckt
blabalbla ooooooo
Wenn Sie also die zweite Form verwenden, müssen Sie daran denken, Folgendes zurückzusetzen:IFS=$' tn'
.
Der zweite Teil dieser Frage wurde hier zusammengeführt, daher habe ich die zugehörige Antwort hier entfernt.