Ich möchte nur alle Dateien in einem bestimmten Verzeichnis in ein Bash-Array bringen (vorausgesetzt, keine der Dateien enthält eine neue Zeile im Namen):
Damit:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Leeres Ergebnis!
Wenn ich auf Umwegen eine Datei verwende, vorübergehend oder auf andere Weise:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Ergebnis!
Aber warum mapfileliest man nicht richtig aus einer Pfeife?
findund mapfilehier überhaupt und nicht nur einfach myarr=(mysqldump*)? Dies funktioniert sogar mit Dateinamen mit Leerzeichen und Zeilenumbrüchen.
nullglobOption on ( shopt -s nullglob) aktivieren muss, um myarr=(mysqldump*)nicht mit dem Array zu enden, ('mysqldump*')falls keine Dateien übereinstimmen.