Чтение входных файлов построчно с помощью команды чтения в сценариях оболочки пропускает последнюю строку
Я обычно использую команду чтения, чтобы построчно прочитать входной файл в сценарий оболочки. Пример кода, такой как приведенный ниже, дает неправильный результат, если новая строка не вставлена в конце последней строки входного файла, blah.txt.
#!/bin/sh
while read line
do
echo $line
done <blah.txt
Так что, если входной файл читает что-то вроде -
One
Two
Three
Four
и я не нажимаю клавишу возврата после четырех, сценарий не может прочитать последнюю строку и печатает
One
Two
Three
Теперь, если я оставлю лишнюю пустую строку после четырех, как,
One
Two
Three
Four
//blank line
на выходе печатаются все строки, включая четыре. Однако это не тот случай, когда я читаю строку, используяcat
команда; все строки, включая последнюю, печатаются без добавления дополнительной пустой строки в конце.
У кого-нибудь есть идеи о том, почему это происходит? Сценарии, которые я создаю, будут в основном выполняться другими, поэтому нет необходимости, чтобы они добавляли дополнительную пустую строку в конце каждого входного файла.
Я пытался понять это целую вечность; Буду признателен, если у вас есть какие-либо решения (конечно,cat
Команда одна, но я хотел бы знать причину, по которой чтение не работает, а).