任何人都可以解释以下bash脚本的控制流程吗?
while IFS= read -r file
do
rm -rf "$file"
done < todelete.txt
根据我的理解,这会发生:
IFS将不会被分配任何内容。 rm -rf命令不执行任何操作,因为它的参数(变量$ file)为空/空/无。 然后前两个步骤将无限期重复。</ p>
显然情况并非如此,因为脚本按预期工作;它会删除todelete.txt中列出的所有文件。
我认为解释在于“完成&lt; todelete.txt”,但我不明白那里发生了什么。
答案 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。)