Tôi chỉ muốn nhận tất cả các tệp trong một thư mục nhất định vào một mảng bash (giả sử rằng không có tệp nào có dòng mới trong tên):
Vì thế:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Kết quả trống rỗng!
Nếu tôi thực hiện cách sử dụng tệp vòng, tạm thời hoặc theo cách khác:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Kết quả!
Nhưng tại sao không mapfile
đọc đúng từ một đường ống?
find
và mapfile
ở đây ở tất cả và không chỉ đơn giản myarr=(mysqldump*)
? Điều này thậm chí sẽ làm việc với tên tập tin với không gian và dòng mới.
nullglob
tùy chọn ( shopt -s nullglob
) myarr=(mysqldump*)
để không kết thúc với mảng ('mysqldump*')
trong trường hợp không có tệp nào khớp.