完成< while循环

时间:2016-03-03 07:43:31

标签: bash

想要在bash中询问一些事情。

使用while循环时,我已经看到使用了如下所示的最后一行:

完成< {文件名}

例如,在阅读文件时看到。

while read line; do
    echo $line
done < file

我猜它正在检查一些布尔语句但是&#34; file&#34;不会以任何方式改变。

这到底是什么意思?

2 个答案:

答案 0 :(得分:6)

while read line; do
    echo $line
done < file

这不是bash特定的。它将文件重定向到循环的标准输入。在您显示的情况下,这将转到read命令。那有什么不对呢?

while read line < file    # WRONG!
do
    echo $line
done 

这会产生无限循环。为什么?因为read line < file读取file的第一行。所以呢?那么它在循环的每次迭代中都会这样做,不断读取文件的第一行。这是因为它实际读取文件的第一行然后关闭文件,文件位置不会保留。

循环仅在read不成功(返回非零)时退出,这通常是在它到达文件结束(EOF)时。在错误的例子中它永远不会命中EOF,它每次成功读取第一行,所以我们得到一个无限循环。

语法也可以与函数一起使用(尽管你经常看不到它):

myfunc() {
    while read line; do
        echo $line
    done
} < file

最后,为了检查你是否理解这一点,这里会发生什么?

while read line 
do
    echo "x" $line
    cat
done < file

答案 1 :(得分:4)

使用&lt;你基本上是在发送&#34; file&#34;的内容。到了while循环。

完整文档:here