readには組み込み変数$ REPLYがありますが、なぜ$lineや他の変数を明示的に宣言するのですか?

readには組み込み変数$ REPLYがありますが、なぜ$lineや他の変数を明示的に宣言するのですか?

1行ずつ読み込み、IFSをnullに設定すると、次のように書くことができます。

while IFS= read -r line
do
    echo "$line"
done < <(find . -name "*.txt")

これは、以下と同じではありません。

while read -r
do
    echo "$REPLY"
done < <(find . -name "*.txt")

なぜまたはいつ他のものよりも優先されますか?

ベストアンサー1

line基本変数の代わりに名前付き変数を使用するのはなぜですかREPLY

コードが何をするかを説明する方法で変数名を指定すると、コードを理解するのに役立ちます。比較する:

files=( ... )
target=...
for file in "${files[@]}"; do
    something "$file" "$target"
done

そして

a=( ... )
b=...
for c in "${a[@]}"; do
    something "$b" "$c"
done

どちらがより明確ですか?バグがある場合、どのバグを見つけやすくなりますか?

おすすめ記事