Does the system-wide limit on argument count apply in shell functions?
Não, esse é um limite na chamada do sistema execve()
usada pelos processos para executar um executável diferente para substituir o atual. Isso não se aplica a funções que são interpretadas pelo interpretador de shell atual no mesmo processo. Isso também não se aplica a utilitários integrados.
execve()
apaga a memória do processo antes de carregar e iniciar o novo executável. O ponto inteiro de funções e builtins é que isso não aconteça, então a função pode modificar as variáveis e outros parâmetros do shell, então eles normalmente não usarão execve()
Do they mimic system limits
Não.
or are they independent?
Sim.
What are they?
Tanto quanto os limites de recursos para o processo de shell atual permitem.
O manual do bash diz:
Não há limite máximo para o tamanho de uma matriz, nem qualquer requisito de que os membros sejam indexados ou atribuídos de forma contígua.
Isto parece aplicar-se, uma vez que os argumentos da função são um array de shell interno (não passado para a função do kernel exec
).
Historicamente, ksh88
e pdksh
tinham um limite baixo nos índices da matriz, mas não no número de argumentos da função. Você pode acessar apenas $1
, ... $9
diretamente no shell Bourne, mas você ainda pode passar tantos argumentos quanto quiser e, por exemplo, fazer um loop sobre todos eles com for arg do...
ou passá-los junto a outra função ou incorporada com "$@"
.