web-dev-qa-db-ja.com

whileループで変数を「読み取る」方法

while read lineを使用して変数から読み取るにはどうすればよいですか?

例えば:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

上記のコードを使用するとエラーが発生します:

./copy.sh: line 25: $the_list: ambiguous redirect
36
Crazy_Bash

あなたは書ける:

while IFS= read -r line
do
    echo "$line"
done <<< "$the_list"

Bashリファレンスマニュアルの= §3.6.7 "Here Strings" を参照してください。

(また、いくつかの二重引用符を追加し、-rおよびIFS=からreadへ。変数の内容をいじり回すことを避けるためです。)

58
ruakh

変数を他の目的に使用しない場合は、変数なしでも実行できます。

while read line ; do
    echo $line
done < <( ... code ... )
24
choroba

あなただけを使用することができます

your_code | while read line;
do
    echo $line
done

サブシェルで実行されているwhileループを気にしない場合(変更した変数は、doneの後に親で表示されません)。

19
Useless