O limite de todo o sistema na contagem de argumentos se aplica nas funções do shell?

2

O outra questão pergunta sobre o limite de criação de comandos por find ' -exec ... {} + . Aqui eu gostaria de saber como esses limites se comparam aos limites internos das conchas. Eles imitam os limites do sistema ou são independentes? O que são eles?

Eu sou um usuário do Bash, mas vou aprender sobre qualquer shells Unix e Linux se for por curiosidade.

    
por Tomasz 11.11.2018 / 23:35

1 resposta

3

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 "$@" .

    
por 12.11.2018 / 00:53