В bash это работает:
echo -n $'a\nb\nc\n' | while read x; do echo = $x =; done
В то время как циклы через три раза
= a =
= b =
= c =
Но представьте себе текстовый файл, в котором нет обычного завершающего символа новой строки. Я думаю, что read все еще должно работать для всех трех строк, но это не так. Я просто получаю:
echo -n $'a\nb\nc' | while read x; do echo = $x =; done
= a =
= b =
help read в bash на самом деле не проясняет.
Примечание. Мне не нужно решать эту проблему, и я вижу несколько способов исправить это самостоятельно. Мне любопытно, и у меня возникает соблазн подать отчет об ошибке - обычно я стараюсь уважать файлы, которые могут не иметь завершающей новой строки. Я столкнулся с этим при использовании опции -d для чтения. read -d " " будет разделяться на пробелы вместо новых строк, но будет пропущена последняя запись, если у нее нет завершающего пробела.
(Ubuntu. GNU bash, версия 4.1.5(1)-выпуск)
kshведет себя так же, какbashв данном случае, @shellter. - person codeforester   schedule 12.01.2021