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?

Tim
fonte

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
pogma
fonte
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=$@
Bruno Mairlot
fonte