Uma variante de @ NarūnasK's
readarray() {
local i=0
unset -v "$1"
while IFS= read -r "$1[i++]"; do :; done
eval "[[ \${$1[--i]} ]]" || unset "$1[i]"
}
Exemplo:
$ readarray a < <(seq 10)
$ printf '%s\n' "${a[2]}"
3
Como importo os resultados de um comando subshell para um array no bash 3?
Eu tenho usado o mapfile para realizar isso no bash 4 da seguinte forma:
mapfile -t myarray < <(someScript.sh)
No entanto, alguns dos servidores com os quais estou trabalhando têm apenas o bash 3 instalado e não podem ser atualizados para o bash 4.
O que é um comando equivalente no bash 4?
Eu preciso ser capaz de iterar as linhas na matriz e executar operações no conteúdo de cada linha.
Uma variante de @ NarūnasK's
readarray() {
local i=0
unset -v "$1"
while IFS= read -r "$1[i++]"; do :; done
eval "[[ \${$1[--i]} ]]" || unset "$1[i]"
}
Exemplo:
$ readarray a < <(seq 10)
$ printf '%s\n' "${a[2]}"
3
Potencialmente, você pode substituí-lo pelo simples while
loop:
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]}"