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