改行ごとに配列に格納する場合
array.txt
aaa
bbb
ccc
array.sh
#!/bin/bash
function arrayEcho() {
echo "aaa"
echo "bbb"
echo "ccc"
}
readarray -t array < array.txt
echo "${array[@]}"
readarray -t array < <(arrayEcho)
echo "${array[@]}"
readarray
(mapfileの別名)は標準入力を改行コードを含んだ文字列に分割し、配列に格納するコマンドである。
-t
オプションで改行コードを削除するので普通の使い方では入れる。
<(arrayEcho)
でコマンドの標準出力を仮想デバイスに変換してファイルとして扱ってくれるものである。
スペース区切りの1行テキストや出力を配列に格納する場合
array2.txt
aaa bbb ccc
array2.sh
#!/bin/bash
function arrayEcho() {
echo aaa bbb ccc
}
read -ra array < array2.txt
echo "${array[@]}"
read -ra array < <(arrayEcho)
echo "${array[@]}"
read
は標準入力から変数に代入するコマンドです。デフォルトでは改行まで格納します。
-a
オプションで標準入力を区切り文字IFSで分割して配列として変数に格納します。
-r
オプションでエスケープ文字を無効にします。
readarray
コマンドでもオプションを加えればできなくはないですが、スペースの区切り文字は1文字でないと難しいなどあつかいに注意が必要なのでread
にしました。