Я просто хочу получить все файлы в определенном каталоге в массив bash (при условии, что ни один из файлов не имеет новой строки в имени):
Так:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Пустой результат!
Если я делаю окольный способ использования файла, временного или иного:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Результат!
Но почему не mapfile
читает правильно из трубы?
find
и mapfile
здесь вообще, а не просто myarr=(mysqldump*)
? Это будет работать даже с именами файлов с пробелами и символами новой строки.
nullglob
параметр ( shopt -s nullglob
), myarr=(mysqldump*)
чтобы не заканчивать массив ('mysqldump*')
в случае, если файлы не совпадают.