Чтение входных файлов построчно с помощью команды чтения в сценариях оболочки пропускает последнюю строку

Я обычно использую команду чтения, чтобы построчно прочитать входной файл в сценарий оболочки. Пример кода, такой как приведенный ниже, дает неправильный результат, если новая строка не вставлена в конце последней строки входного файла, 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 Команда одна, но я хотел бы знать причину, по которой чтение не работает, а).

Ответы на вопрос(5)

Ваш ответ на вопрос