0

次のbashスクリプトの制御フローを誰かが説明できますか?

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

私が理解していることから、これは起こります:

IFSには何も割り当てられません。rm -rfコマンドは、その引数である変数$ fileが空白/空/何もないため、何もしません。その後、前の2つのステップが無期限に繰り返されます。

スクリプトは期待どおりに機能するため、明らかにこれは当てはまりません。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.txtstdin

詳細については、Bashマニュアルの「内部コマンド」セクションをお読みください。(例15-7を直接参照してください。)

于 2011-09-25T07:38:24.920 に答える