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 mapfile
lê corretamente de um cachimbo?
find
e mapfile
aqui em tudo e não apenas simplesmente myarr=(mysqldump*)
? Isso funcionará mesmo com nomes de arquivos com espaços e novas linhas.
nullglob
opção ( shopt -s nullglob
) para myarr=(mysqldump*)
não terminar com a matriz ('mysqldump*')
caso nenhum arquivo corresponda.