Bashの変数から1行ずつ読み込むには?

Bashの変数から1行ずつ読み込むには?

コマンドの複数行出力を含む変数があります。変数から出力を1行ずつ読み取る最も効率的な方法は何ですか?

たとえば、

jobs="$(jobs)"
if [ "$jobs" ]; then
    # read lines from $jobs
fi

ベストアンサー1

プロセス置換にはwhileループを使用できます。

while read -r line
do
    echo "$line"
done < <(jobs)

複数行変数を読み取る最善の方法は、空のIFS変数を設定し、printf変数に末尾の改行文字を追加することです。

# Printf '%s\n' "$var" is necessary because printf '%s' "$var" on a
# variable that doesn't end with a newline then the while loop will
# completely miss the last line of the variable.
while IFS= read -r line
do
   echo "$line"
done < <(printf '%s\n' "$var")

注:によるとシェルチェック sc2031、パイプの代わりにプロセス置換を使用して、サブシェルの生成を[微妙に]防止します。

また、変数名を指定するとjobs一般的なシェルコマンドの名前でもあるため、混乱を招く可能性があります。

おすすめ記事