0

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

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

据我了解,这会发生:

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

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

我相信解释在于“done < todelete.txt”,但我不明白那里发生了什么。

4

2 回答 2

2

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

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

于 2011-09-25T07:37:51.233 回答
1

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

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

于 2011-09-25T07:38:24.920 回答