whileの中で定義した変数は、whileの外ではアクセスできません。でもzshはできるんです。
なので内容によってはハマるかもだよ、という話です。
# こんなファイルがあるとします
$ cat file
aaaaa
bbbbb
ccccc
# ファイルを1行ずつ読み込んでechoするwhile文
cat file | while read line
do
BUF=${line}
echo ${BUF}
done
echo "-----"
echo ${BUF} # ここに注目
/bin/sh
最後の行、 echo ${BUF}
の結果がからっぽです。というかそんな変数無いよ、という状態ですね。
実行結果
aaaaa
bbbbb
ccccc
-----
# BUFがからっぽ!
/bin/bash
/bin/sh
におなじく。
実行結果
aaaaa
bbbbb
ccccc
-----
# BUFがからっぽ!
/bin/zsh
この人だけ違います。
実行結果
aaaaa
bbbbb
ccccc
-----
ccccc # 最後の状態のBUFが表示される