Je veux juste obtenir tous les fichiers d’un répertoire donné dans un tableau bash (en supposant qu’aucun des fichiers n’ait une nouvelle ligne dans le nom):
Alors:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Résultat vide!
Si je fais la maniʻere détournée d'utiliser un fichier, temporaire ou non:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Résultat!
Mais pourquoi ne mapfilelit-il pas correctement à partir d'un tuyau?
findet mapfileici du tout et pas simplement myarr=(mysqldump*)? Cela fonctionnera même avec les noms de fichiers avec des espaces et des nouvelles lignes.
nullgloboption ( shopt -s nullglob) pour myarr=(mysqldump*)ne pas se retrouver avec le tableau ('mysqldump*')si aucun fichier ne correspond.