while read line
を使用して変数から読み取るにはどうすればよいですか?
例えば:
the_list=$(..code..)
while read line
do
echo $line
done < $the_list
上記のコードを使用するとエラーが発生します:
./copy.sh: line 25: $the_list: ambiguous redirect
あなたは書ける:
while IFS= read -r line
do
echo "$line"
done <<< "$the_list"
Bashリファレンスマニュアルの= §3.6.7 "Here Strings" を参照してください。
(また、いくつかの二重引用符を追加し、-r
およびIFS=
からread
へ。変数の内容をいじり回すことを避けるためです。)
変数を他の目的に使用しない場合は、変数なしでも実行できます。
while read line ; do
echo $line
done < <( ... code ... )
あなただけを使用することができます
your_code | while read line;
do
echo $line
done
サブシェルで実行されているwhileループを気にしない場合(変更した変数は、done
の後に親で表示されません)。