如何使用while read line
读取变量?
例如:
the_list=$(..code..)
while read line
do
echo $line
done < $the_list
使用上面的代码给我错误:
./copy.sh: line 25: $the_list: ambiguous redirect
答案 0 :(得分:55)
你可以写:
while IFS= read -r line
do
echo "$line"
done <<< "$the_list"
请参阅§3.6.7 "Here Strings" in the Bash Reference Manual。
(我还冒昧地添加了一些双引号,并将-r
和IFS=
添加到read
,以避免过多地使用变量内容。)
答案 1 :(得分:24)
如果你没有将变量用于其他任何事情,你甚至可以不使用它:
while read line ; do
echo $line
done < <( ... code ... )
答案 2 :(得分:18)
你可以使用
your_code | while read line;
do
echo $line
done
如果您不介意在子shell中执行while循环(您修改的任何变量在done
之后的父级中都不可见。)
答案 3 :(得分:-2)
脚本文件应该处于Linux模式。以前它处于dos模式。我使用dos2unix filename
更改了它。
e.g:
dos2unix sshcopy.sh
现在它对我有用。