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]}"

관련 정보