オンラインでforループの例を見つけました。私は私のコードでこれを使いたいのですが、このループがどのように機能するのかわかりません。
for entry in "$search_dir"/*
do
echo "$entry"
done
今私は聞きたいです。
- 反復ごとにsearch_dirを検索し、search_dirのファイルを各反復ごとに1つの項目変数のファイルにコピーしますか?
- それとも、search_dirのすべてのコンテンツのスナップショットを撮ってから、そのスナップショットをアイテム変数に保存しますか?
- ループが動作し続けている間、誰かがsearch_dirにいくつかのファイルを挿入すると、出力は変わりますか?
ベストアンサー1
シェルがfor
- ステートメントに到達すると、値を展開して$search_dir
ファイル名のグロービングを実行して、繰り返すディレクトリエントリのリストを生成します。これは一度だけ発生します。ループの内容が$search_dir
消えたり、新しいファイル/ディレクトリがディレクトリに追加されても、その変更は適用されません。
ループが名前付きディレクトリエントリで動作している場合は、その$entry
エントリがループ内に存在するかどうかをテストできます。特に、ループの実行に長い時間がかかり、次のような理由で絶えず変更される多数のファイルがある場合は、さらにそうです。もう一つ:
for entry in "$search_dir"/*; do
if [ -e "$entry" ]; then
# operate on "$entry"
else
# handle the case that "$entry" went away
fi
done
Stéphaneがコメントで正しく指摘したように、これは重複するテストです。最大ケース。