43

如何从变量中读取while read line

例如:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

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

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

4 回答 4

70

你可以写:

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

请参阅Bash 参考手册中的第 3.6.7 节“此处的字符串”

(我还冒昧地添加了一些双引号,并添加了-rand IFS=to read,以避免过多地混淆变量的内容。)

于 2012-10-29T13:22:59.427 回答
27

如果您不将变量用于其他任何事情,您甚至可以不使用它:

while read line ; do
    echo $line
done < <( ... code ... )
于 2012-10-29T13:32:53.240 回答
24

你可以使用

your_code | while read line;
do
    echo $line
done

如果您不介意在子 shell 中执行的 while 循环(您修改的任何变量在 之后的父项中都不可见done)。

于 2012-10-29T13:22:08.807 回答
-3

脚本文件应为 Linux 模式。以前它处于dos模式。我使用 dos2unix filename.

例如:

dos2unix sshcopy.sh

现在它对我有用。

于 2013-06-25T23:18:27.227 回答