Это связано с отсутствием разрыва строки в последней строке вашего входного файла.
Вы можете использовать этот цикл, чтобы прочитать все:
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done < "$file"
Для последней строки без разрыва строки, read
не возвращает успеха, следовательно, [ -n "$line" ]
проверяется, чтобы убедиться, что вы печатаете его, когда $line
не пусто.
PS: Если вы не возражаете против изменения входного файла, тогдаиспользуйте printf
для добавления новой строки, используя:
printf '\n' >> "$file"
, а затем читайте как обычно:
while IFS= read -r line; do
echo "$line"
done < "$file"