如何将子 shell 命令的结果导入到 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]}"