Tidak ada batasan (selain memori yang tersedia) untuk jumlah file yang dapat diperluas oleh bash
glob.
Namun ketika file-file itu dilewatkan sebagai argumen untuk perintah yang dieksekusi (sebagai lawan dari builtin shell atau fungsi), maka Anda dapat mengalami batas execve()
panggilan sistem pada beberapa sistem. Pada kebanyakan sistem, pemanggilan sistem itu memiliki batasan ukuran kumulatif argumen dan lingkungan yang diteruskan ke sana, dan di Linux juga ada batasan terpisah pada ukuran argumen tunggal.
Untuk detail lebih lanjut, lihat:
Untuk mengatasi batas itu, Anda dapat menggunakan (dengan asumsi GNU xargs
atau kompatibel):
printf '%s\0' foo* | xargs -r0 rm -f
Di atas, karena printf
built-in (di bash
dan sebagian besar shell Bourne-like), kami tidak mencapai execve()
batasnya. Dan xargs
akan membagi daftar argumen menjadi rm
doa sebanyak yang diperlukan untuk menghindari execve()
batasan.
Dengan zsh
:
autoload zargs
zargs foo* -- rm -f
Dengan ksh93
:
command -x rm -f foo*