Không có giới hạn (ngoài bộ nhớ khả dụng) đối với số lượng tệp có thể được mở rộng bởi toàn bash
cầu.
Tuy nhiên, khi các tệp đó được truyền dưới dạng đối số cho một lệnh được thực thi (trái ngược với hàm dựng sẵn hoặc hàm), thì bạn có thể gặp phải giới hạn của lệnh execve()
gọi hệ thống trên một số hệ thống. Trên hầu hết các hệ thống, lệnh gọi hệ thống đó có giới hạn về kích thước tích lũy của các đối số và môi trường được truyền cho nó và trên Linux cũng có một giới hạn riêng về kích thước của một đối số.
Để biết thêm chi tiết, xem:
Để khắc phục giới hạn đó, bạn có thể sử dụng (giả sử GNU xargs
hoặc tương thích):
printf '%s\0' foo* | xargs -r0 rm -f
Ở trên, vì printf
được tích hợp (trong bash
và hầu hết các vỏ giống như Bourne), chúng tôi không đạt đến execve()
giới hạn. Và xargs
sẽ chia danh sách các đối số thành nhiều rm
lời mời nếu cần để tránh execve()
giới hạn.
Với zsh
:
autoload zargs
zargs foo* -- rm -f
Với ksh93
:
command -x rm -f foo*