Не існує обмеження (крім доступної пам'яті) кількості файлів, які можуть бути розширені bash
глобусом.
Однак, коли ці файли передаються як аргументи команді, яка виконується (на відміну від вбудованої оболонки або функції), ви можете стикатися з обмеженням execve()
системного виклику в деяких системах. У більшості систем цей системний виклик має обмеження на сукупний розмір аргументів та середовища, що передаються йому, а в Linux також окремий ліміт на розмір одного аргументу.
Докладніше див:
Щоб подолати цю межу, ви можете використовувати (припускаючи GNU xargs
або сумісний):
printf '%s\0' foo* | xargs -r0 rm -f
Зверху, оскільки printf
вбудований ( bash
і в більшості подібних до Борна снарядів), ми не досягаємо execve()
межі. І xargs
розділить список аргументів на стільки rm
викликів, скільки потрібно, щоб уникнути execve()
обмеження.
З zsh
:
autoload zargs
zargs foo* -- rm -f
З ksh93
:
command -x rm -f foo*