Come posso ottenere argomenti rimanenti dopo aver estratto gli oggetti analizzati usando getopts?


14

Voglio analizzare alcuni argomenti su uno script bash usando getopts ma voglio essere in grado di accedere agli argomenti rimanenti che non sono inclusi nell'elenco delle opzioni. Quindi, ad esempio, se ho una chiamata:

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

Avrei:

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

Qual è il modo più semplice per ottenere "altri argomenti qui", che dovrebbero essere non elaborati da getopts?

Risposte:


17

devi cambiare quando analizzi un argomento o metti

sposta $ ((OPTIND -1)) dopo aver terminato l'analisi, quindi gestisci nel solito modo, ad es

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

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

1
Vale la pena spiegare che $ OPTIND è l'indice della prossima opzione da considerare, dopo l'esecuzione di ogni getopts. Quindi $ * contiene 3 parametri, dopo che la prima chiamata valida è 2 e la seconda è 3. Se una chiamata non è valida, verrà abbandonata con il valore precedente. Quindi, se il parametro 1 non è valido, OPTIND sarà 1 (quindi l'esempio sopra sarà shift $(expr 1 - 1)sicuro.
Sibaz

0

Alla fine dell'analisi, dopo aver spostato la variabile $ @ contiene la fine della riga:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.