Как "читать" переменную в цикле while

Как я могу прочитать переменную с помощью while read line?

Например:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

с использованием приведенного выше кода дает мне ошибку:

./copy.sh: line 25: $the_list: ambiguous redirect
+30
источник поделиться
4 ответа

Вы можете написать:

while IFS= read -r line
do
    echo "$line"
done <<< "$the_list"

См. & sect; 3.6.7 "Здесь строки" в справочном руководстве Bash.

(Я также позволил добавить несколько двойных кавычек и добавить -r и IFS= в read, чтобы избежать слишком большого количества ошибок с содержимым ваших переменных.)

+51
источник

Если вы не используете эту переменную ни для чего другого, вы можете обойтись без нее:

while read line ; do
    echo $line
done < <( ... code ... )
+23
источник

Вы можете просто использовать

your_code | while read line;
do
    echo $line
done

если вы не возражаете против цикла while, выполняющегося в подоболочке (любые измененные вами переменные не будут видны в родительском объекте после done).

+15
источник

Script файл должен находиться в режиме Linux. Раньше это было в режиме dos. Я изменил его, используя dos2unix filename.

например:.

dos2unix sshcopy.sh

Теперь это работает для меня.

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос