Voglio solo ottenere tutti i file in una determinata directory in un array bash (supponendo che nessuno dei file abbia una nuova riga nel nome):
Così:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Risultato vuoto!
Se faccio il modo rotonda di utilizzare un file, temporaneo o altro:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Risultato!
Ma perché non mapfilelegge correttamente da una pipe?
finde mapfilequi a tutti e non solo semplicemente myarr=(mysqldump*)? Funzionerà anche con i nomi di file con spazi e nuove righe.
nullglobopzione on ( shopt -s nullglob) per myarr=(mysqldump*)non finire con l'array ('mysqldump*')nel caso in cui nessun file corrisponda.