
bash 3でサブシェルコマンドの結果を配列に取得する方法は?
私はこれを達成するためにbash 4で次のようにmapfileを使用してきました。
mapfile -t myarray < <(someScript.sh)
ただし、私が使用している一部のサーバーにはbash 3のみがインストールされており、bash 4にアップグレードすることはできません。
Bash 4で同等のコマンドは何ですか?
配列の行を繰り返し、各行の内容に対して操作を実行できる必要があります。
答え1
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]}"