Em man 1 bash
:
Each command in a pipeline is executed as a separate process (i.e., in a subshell).
Esses subshells herdam variáveis do shell principal, mas são independentes. Isso significa que mapfile
em seu comando original opera em seu próprio myarr
. Então echo
(estando fora do canal) imprime vazio myarr
(que é o myarr
do shell principal).
Este comando funciona de maneira diferente:
find . -maxdepth 1 -name "mysqldump*" | { mapfile -t myarr; echo "${myarr[@]}"; }
Nesse caso, mapfile
e echo
operam no mesmo myarr
(que não é o myarr
do shell principal).
Para alterar o myarr
do shell principal, você precisa executar exatamente mapfile
no shell principal. Exemplo:
myarr=()
mapfile -t myarr < <(find . -maxdepth 1 -name "mysqldump*")
echo "${myarr[@]}"