Нет ограничений (кроме доступной памяти) на количество файлов, которые могут быть расширены 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*