Как "читать" переменную в цикле 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
Теперь это работает для меня.