【问题标题】:While, do, done flow control in bashwhile,do,在 bash 中完成流控制
【发布时间】:2011-11-24 13:06:16
【问题描述】:

谁能解释以下bash脚本的控制流程?

while IFS= read -r file
do 
rm -rf "$file"
done < todelete.txt

据我了解,这会发生:

IFS 不会被分配任何东西。 rm -rf 命令什么都不做,因为它的参数变量 $file 是空白/空/无。 前面的两个步骤将无限期地重复。

显然情况并非如此,因为脚本按预期工作;它会删除 todelete.txt 中列出的所有文件。

我相信解释在于“完成

【问题讨论】:

    标签: bash loops while-loop ifs


    【解决方案1】:

    整个while ... done 被视为单个命令,在其输入中提供一个todelete.txt 文件。

    while IFS= read -r file 事物从这个输入文件中读取行直到EOF,将每一行分配给$file 变量,并且循环的每次迭代都会删除该文件。

    【讨论】:

      【解决方案2】:

      done 之后的重定向会影响read 的输入流。所以read 将作用于todelete.txt 而不是stdin 的内容。

      您应该阅读 Bash 手册的Internal Commands 部分以获取更多信息。 (直接浏览示例 15-7。)

      【讨论】:

        猜你喜欢
        • 2013-05-05
        • 2014-08-16
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 2011-12-16
        • 2012-06-21
        • 1970-01-01
        相关资源
        最近更新 更多