Encontrei uma resposta quando estava preparando esta pergunta. Outras respostas são bem vindas.
Em um projeto awk relativamente grande, como translate-shell , a primeira solução é usada:
function parseList(returnAST, tokens,
leftBrackets,
rightBrackets,
separators,
####
i, j, key, p, stack, token) {
...
}
parâmetros após ####
são locais.
o awk permite chamar a função com menos parâmetros, por ex. parseList(ast, tokens)
ou parseList(ast, tokens, lb, rb, sep)
. Portanto, apenas a assinatura é complicada.