para analisar a lista de argumentos, tentei implementar um esquema comum de análise de cima para baixo.
Eu me perguntei por que minha eat()
função não funcionaria. Porque os argumentos posicionais $1, $2, $3, ... estão no contexto dessa função específica. Não os do roteiro real. Desapontamento. Ainda não me acostumei com o bash.
Então a minha pergunta é, se estiver correto, que também o escopo da mudança é o contexto da minha eat()
função, certo?
Não há realmente nenhuma maneira de mudar os argumentos do script de dentro de outra função? : (
[Isso significa que tenho que implementar TODA a lógica (que normalmente adere a analisadores de cima para baixo) em uma instrução case! (!?)]
Responder1
Uma função pode retornar todos (ou um subconjunto) dos argumentos que foram passados (por exemplo, através de um array global), e o script de chamada pode então usar isso para definir seus próprios argumentos. por exemplo
#!/bin/bash
declare -a args
nofoo() {
# we don't like "--foo", it is forbidden!
for a in "$@"; do
[ "$a" != "--foo" ] && args+=("$a")
done
}
nofoo "$@"
set -- "${args[@]}"
Do help set
bash:
definir:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Definir ou cancelar valores de opções de shell e parâmetros posicionais.
Altere o valor dos atributos do shell e dos parâmetros posicionais ou exiba os nomes e valores das variáveis do shell.
[...]
--
Atribua quaisquer argumentos restantes aos parâmetros posicionais. Se não houver argumentos restantes, os parâmetros posicionais não serão definidos.