Построчное чтение файла в bash

#linux #bash

#linux #bash

Вопрос:

Пытаюсь прочитать файл построчно, но это не работает, пробовал много разных способов, в том числе ниже:

 $ cat test.sh
#!/bin/bash

echo 'line1
line2
line3
line4
;;' > list.txt

IFS=$'n'

for line in "$(cat list.txt)"
do
   echo "line=$line"
   echo "----"
done
  

Когда я запускаю:

 $ ./test.sh
line=line1
line2
line3
line4
;;
----
  

Ответ №1:

Поскольку вы использовали кавычки при подстановке команд, $() оболочка не выполняет разбиение слов на новую строку ( IFS=$'n' ) (и расширение имени пути), следовательно, все содержимое файла будет взято как одна строка (она есть в первой line ), вместо строк, разделенных новой строкой, для повторения.

Вам нужно убрать кавычки:

 for line in $(cat list.txt)
  

Хотя не рекомендуется выполнять итерации по строкам файла с помощью for cat комбинация используйте while read вместо:

 while IFS= read -r line; do ...;  done <list.txt