Eu só quero obter todos os arquivos em um determinado diretório em uma matriz bash (supondo que nenhum dos arquivos tenha uma nova linha no nome):
Assim:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Resultado vazio!
Se eu usar a maneira indireta de usar um arquivo, temporário ou não:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Resultado!
Mas por que não mapfilelê corretamente de um cachimbo?
finde mapfileaqui em tudo e não apenas simplesmente myarr=(mysqldump*)? Isso funcionará mesmo com nomes de arquivos com espaços e novas linhas.
nullglobopção ( shopt -s nullglob) para myarr=(mysqldump*)não terminar com a matriz ('mysqldump*')caso nenhum arquivo corresponda.