【问题标题】:done < {filename} in the while loop在while循环中完成< {filename}
【发布时间】:2016-06-16 09:58:50
【问题描述】:

想问一些关于 bash 的问题。

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

完成

例如在读取文件时看到。

while read line; do
    echo $line
done < file

我猜它正在根据一些布尔语句进行检查,但“文件”没有以任何方式改变。

这到底是什么意思?

【问题讨论】:

    标签: bash


    【解决方案1】:
    while read line; do
        echo $line
    done < file
    

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用

      完整文档:Bash Redirections

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 1970-01-01
        • 2019-04-09
        • 2022-11-03
        • 2013-07-12
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多