2011-09-25 43 views
0

任何人都可以解釋下面的bash腳本的控制流程嗎?雖然,在bash中完成流量控制

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

據我瞭解,這種情況會發生:

IFS將沒有分配。 rm -rf命令不會執行任何操作,因爲它的變量$ file是空白/空白/無。 之前的兩個步驟將會無限期重複。

顯然情況並非如此,因爲腳本按預期工作;它會刪除todelete.txt中列出的所有文件。

我相信解釋在於「完成< todelete.txt」,但我不明白那裏發生了什麼。

回答

1

done之後的重定向影響read的輸入流。所以read將工作在todelete.txt而不是stdin的內容。

您應該閱讀Bash手冊的Internal Commands部分以獲取更多信息。 (直接瀏覽示例15-7。)

2

整個while ... done被視爲單個命令,該命令在其輸入上輸入一個todelete.txt文件。

while IFS= read -r file東西從這個輸入文件讀取直到EOF,將每行分配給$file變量,並且循環的每次迭代都會刪除該文件。