Последняя строка файла не читается в сценарии оболочки - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть текстовый файл foo.txt с текстом ниже,

1
2
3
4
5

У меня есть сценарий оболочки,

file="foo.txt" 
while IFS= read -r line
do
   echo "$line"
done < "$file"

Но он печатается только до 4.

Фактический вывод:

1
2
3
4

Как получить ожидаемый результат, как показано ниже?

Ожидаемый результат:

1
2
3
4
5

1 Ответ

0 голосов
/ 25 сентября 2018

Это связано с отсутствием разрыва строки в последней строке вашего входного файла.

Вы можете использовать этот цикл, чтобы прочитать все:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...