bash 3でサブシェル出力を配列に移動する

bash 3でサブシェル出力を配列に移動する

bash 3でサブシェルコマンドの結果を配列に取得する方法は?

私はこれを達成するためにbash 4で次のようにmapfileを使用してきました。

mapfile -t myarray < <(someScript.sh)

ただし、私が使用している一部のサーバーにはbash 3のみがインストールされており、bash 4にアップグレードすることはできません。

Bash 4で同等のコマンドは何ですか?

配列の行を繰り返し、各行の内容に対して操作を実行できる必要があります。

答え1

の変種寄稿者: @NarūnasK

readarray() {
  local i=0
  unset -v "$1"
  while IFS= read -r "$1[i++]"; do :; done
  eval "[[ \${$1[--i]} ]]" || unset "$1[i]"
}

例:

$ readarray a < <(seq 10)
$ printf '%s\n' "${a[2]}"
3

答え2

おそらく簡単なループに置き換えることができますwhile

function map_my_array()
{
  my_file=$1
  local i=0
  while IFS='' read -r line || [[ -n "${line}" ]]; do
    my_array[((i++))]="${line}"
  done < "${my_file}"
}

fpath="$HOME/tst.sh"
echo 'cat /etc/passwd' > "${fpath}"
chmod +x "${fpath}"

map_my_array <("${fpath}")

echo "${my_array[3]}"

関連情報