Конечные переводы строк и встроенная функция чтения - PullRequest
3 голосов
/ 22 декабря 2011

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

1 Ответ

1 голос
/ 22 декабря 2011
$ man bash
   read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
          One line is read from the standard input, ...

Я думаю, что ключ: How to define "One line".
Имеет ли text without a '\n' at the end делает One line?
Я думаю, read так не думаю.

...