Существует ли максимальный предел расширения имени файла в bash (глобализация) и если да, то какой он?

Существует ли максимальный предел расширения имени файла в bash (глобализация) и если да, то какой он?

Существует ли максимальный предел расширения имени файла в bash (globbling) и если да, то какой он? См.подстановкана tldp.org.

Допустим, я хочу выполнить команду для подмножества файлов:

grep -e bar foo*
rm -f bar*

Существует ли ограничение на количество файлов, на которые может расшириться bash, и если да, то каково оно?

Я не ищу альтернативные способы выполнения этих операций (например, с помощью find).

решение1

Ограничений (кроме доступной памяти) на количество файлов, которые могут быть расширены с помощью глобуса, нет bash.

Однако когда эти файлы передаются в качестве аргументов команде, котораяказнен(в отличие от встроенной функции оболочки), то вы можете столкнуться с ограничением системного execve()вызова в некоторых системах. В большинстве систем этот системный вызов имеет ограничение на совокупный размер переданных ему аргументов и окружения, а в Linux также отдельное ограничение на размер одного аргумента.

Более подробную информацию см. здесь:

Чтобы обойти это ограничение, можно использовать (предполагается, что GNU xargsили совместимое):

printf '%s\0' foo* | xargs -r0 rm -f

Выше, поскольку printfвстроено (в bashбольшинстве оболочек типа Bourne), мы не достигаем предела execve(). И xargsразделим список аргументов на столько rmвызовов, сколько необходимо, чтобы избежать execve()ограничения.

С zsh:

autoload zargs
zargs foo* -- rm -f

С ksh93:

command -x rm -f foo*

решение2

Ограничение на общий размер аргументов можно увидеть с помощью:

getconf ARG_MAX

Это определяется, как правило, не оболочкой, а базовой операционной системой в соответствии сэтот ответ.

Связанный контент