我如何阅读" while循环中的变量

时间:2012-10-29 13:19:21

标签: bash variables while-loop

如何使用while read line读取变量?

例如:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

使用上面的代码给我错误:

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

4 个答案:

答案 0 :(得分:55)

你可以写:

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

请参阅§3.6.7 "Here Strings" in the Bash Reference Manual

(我还冒昧地添加了一些双引号,并将-rIFS=添加到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

现在它对我有用。