虽然,做,在bash中完成流量控制

时间:2011-09-25 07:30:49

标签: bash loops while-loop ifs

任何人都可以解释以下bash脚本的控制流程吗?

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

根据我的理解,这会发生:

IFS将不会被分配任何内容。 rm -rf命令不执行任何操作,因为它的参数(变量$ file)为空/空/无。 然后前两个步骤将无限期重复。<​​/ p>

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

我认为解释在于“完成&lt; todelete.txt”,但我不明白那里发生了什么。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

done影响read输入流后的重定向。因此,read将处理todelete.txt而不是stdin的内容。

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