Como posso obter argumentos restantes depois de extrair itens analisados ​​usando getopts?


14

Desejo analisar alguns argumentos em um script bash usando getopts, mas quero poder acessar os argumentos restantes que não estão incluídos na lista de opções. Por exemplo, se eu tiver uma ligação:

% script -a -b param -c param -d other arguments here

Eu teria:

while getopts "ab:c:d" opt ; do
.
done

Qual é a maneira mais fácil de obter "outros argumentos aqui", que não devem ser processados ​​por getopts?

Respostas:


17

você precisa mudar quando analisa um argumento ou coloca

shift $ ((OPTIND -1)) depois de terminar a análise e, em seguida, negocie da maneira usual, por exemplo

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
Vale a pena explicar que $ OPTIND é o índice da próxima opção a ser considerada, após a execução de cada getopts. Portanto, $ * contém 3 parâmetros, após a primeira chamada válida é 2 e a segunda é 3. Se a chamada for inválida, ela sairá com o valor anterior. Então, se o parâmetro 1 não é válido, OPTIND será de 1 (daí o exemplo vontade acima de shift $(expr 1 - 1)que é seguro.
sibaz

0

No final da análise, uma vez que você alterou a variável $ @ contém o final da linha:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.