while が好きなので次のようなループを よく書きます。
ls -1 | while read FILE do echo $FILE done
これはパイプを使っているので while 以降が別プロセスになってしまいます。 (下の赤文字の部分が別プロセスです)
ls -1 | while read FILE
do
echo $FILE
done
なので、 ループ内で変数の値を設定しても ループの外では参照することができません。
例えば次のような場合
AAA=0 ls -1 | while read FILE do echo $FILE AAA=1 done echo $AAA
結果として 0 が出力されます。