Shift: Existe uma versão global?

Shift: Existe uma versão global?

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 setbash:

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.

informação relacionada