Bash:行配列のstdoutコマンド(スペースの問題)

Bash:行配列のstdoutコマンド(スペースの問題)

状況:コマンド出力を配列に保存する必要があります。各行は1つの要素です。行にスペースが含まれているため、すべてが混乱する可能性があります。

一般的に私はそのようなことをしますARRAY=($(command))。しかし、このようなことをしようとすると、ARRAY=($(printf '%s\n' "first line" "second line"))配列は次のようになります。

$ for x in "${ARRAY[@]}"; do echo $x; done
first
line
second
line

少し醜いですが、私が望む動作を達成する方法を見つけました。

$ readarray -t ARRAY < <(printf '%s\n' "first line" "second line")
$ for x in "${ARRAY[@]}"; do echo $x; done
first line
second line

これを行うより良い方法を知っている人はいますか?私は何を逃したことがありませんか?

ベストアンサー1

readarray/mapfileはいこれただし、この機能はbash v4に追加されているため、その機能がないシステム(macos)を使用している場合は、はるかに「醜い」方法で実行できます。

IFS=$'\n' array=($(printf '%s\n' "first line" "second line"))

またはもっと醜い方法で:

while IFS= read -r line; do 
    array+=("$line")
done < <(printf '%s\n' "first line" "second line")

おすすめ記事