No soy un chico de Linux, pero estoy atrapado en un script que tengo que leer para mi proyecto. Entonces, ¿alguien puede ayudarme en lo que hace este comando?
shift $(($optind - 1))
bash
shell
shell-script
Gaurav Pant
fuente
fuente

Respuestas:
shift $((OPTIND-1))(la notaOPTINDes mayúscula) normalmente se encuentra inmediatamente después de ungetoptswhilebucle.$OPTINDes la cantidad de opciones encontradas porgetopts.Como pauljohn32 menciona en los comentarios, estrictamente hablando,
OPTINDda la posición del siguiente argumento de línea de comando.Del Manual de referencia de GNU Bash :
shiftnelimina n cadenas de la lista de parámetros posicionales. Así
shift $((OPTIND-1))elimina todas las opciones que se han analizadogetoptsde la lista de parámetros y, después de ese punto,$1se referirá al primer argumento sin opción pasado al script.Actualizar
Como menciona mikeserv en el comentario,
shift $((OPTIND-1))puede ser inseguro. Para evitar la división de palabras no deseada, etc., todas las expansiones de parámetros deben ser entre comillas dobles. Entonces la forma segura para el comando esshift "$((OPTIND-1))"fuente
find) pueden parecer que permiten opciones después de no opciones, pero no: tienen operandos que comienzan con un guión.IFS, pero es mejor prevenir que curar. ;)IFS=0123456789,shift $((OPTIND-1))(sin comillas) se convertirá en loshift ""que se ignorará en silencio (enksh) o generará un error (enbashydash).$((...))solo calcula cosas. En su caso, toma el valor de$optinty resta 1.shiftelimina los parámetros posicionales. En su caso, elimina losoptint-1parámetros.Para obtener más información echar un vistazo a
help getopts,help shift, verman bashpara "expansión aritmética", y especialmente Google paragetopts.fuente