¿Cómo puedo obtener los args restantes después de extraer elementos analizados usando getopts?

14

Quiero analizar algunos argumentos en un script bash usando getopts pero quiero poder acceder a los argumentos restantes que no están incluidos en la lista de opciones. Entonces, por ejemplo, si tengo una llamada:

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

Quisiera:

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

¿Cuál es la forma más fácil de obtener "otros argumentos aquí", que no deben ser procesados ​​por getopts?

Tim
fuente

Respuestas:

17

necesita cambiar cuando analiza un argumento, o pone

shift $ ((OPTIND -1)) después de que haya terminado de analizar, luego trate de la manera habitual, por ejemplo

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

while test $# -gt 0; do
  echo $1
  shift
done
pogma
fuente
1
Vale la pena explicar que $ OPTIND es el índice de la siguiente opción a considerar, después de ejecutar cada getopts. Por lo tanto, $ * contiene 3 parámetros, después de la primera llamada válida es 2 y la segunda es 3. Si la llamada no es válida, se abandonará con el valor anterior. Entonces, si el parámetro 1 no es válido, OPTIND será 1 (de ahí que el ejemplo anterior shift $(expr 1 - 1)sea ​​seguro.)
sibaz
0

Al final del análisis, una vez que haya cambiado la variable $ @ contiene el final de la línea:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Bruno Mairlot
fuente