コマンドの複数行出力を含む変数があります。変数から出力を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
一般的なシェルコマンドの名前でもあるため、混乱を招く可能性があります。