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

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

Например:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

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

./copy.sh: line 25: $the_list: ambiguous redirect

Ответ 1

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

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

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

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

Ответ 2

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

while read line ; do
    echo $line
done < <( ... code ... )

Ответ 3

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

your_code | while read line;
do
    echo $line
done

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

Ответ 4

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

например:.

dos2unix sshcopy.sh

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