Chcę tylko przenieść wszystkie pliki z określonego katalogu do tablicy bash (zakładając, że żaden z plików nie ma nowej linii w nazwie):
Więc:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Pusty wynik!
Jeśli korzystam z pliku przy użyciu ronda, tymczasowo lub w inny sposób:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Wynik!
Ale dlaczego nie mapfile
czyta poprawnie z potoku?
find
i mapfile
tutaj, a nie tylko myarr=(mysqldump*)
? Będzie to nawet działać z nazwami plików ze spacjami i znakami nowej linii.
nullglob
opcję on ( shopt -s nullglob
), myarr=(mysqldump*)
aby nie skończyć z tablicą ('mysqldump*')
na wypadek, gdyby żadne pliki się nie zgadzały.