Как читать построчно из файла в скрипте bash? - PullRequest
4 голосов
/ 31 октября 2011

Я искал в Интернете эту проблему и нашел два способа:

   while read line; do
      commands
   done < "$filename"

и

    for $line in $(cat $filename); do
       commands
    done

ничего из этого не работает, если в строках есть пробел, например, если у нас есть такая строка

  textextext text

не будет печататься textextext text

но

  textextext
  text

он считает эти вещи отдельной строкой, как я могу избежать этого?

Ответы [ 2 ]

9 голосов
/ 31 октября 2011

Как это?

while IFS= read line ; do
   something "$line"
done <"$file"

Вот краткий тест:

while IFS= read line ; do echo "$line"; done <<<"$(echo -e "a b\nc d")"
a b
c d
7 голосов
/ 31 октября 2011

Вы можете читать массив (Bash 4 +)

readarray lines < "$file"

тогда

for line in "${lines[@]}"; 
do
    echo "$line"
done

Обратите внимание, что по умолчанию readarray будет даже включать символ конца строки для каждой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...