将 subshel​​l 输出移动到 bash 3 中的数组中

将 subshel​​l 输出移动到 bash 3 中的数组中

如何将子 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]}"

相关内容