В 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) -релиз)