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 notaOPTIND
es mayúscula) normalmente se encuentra inmediatamente después de ungetopts
while
bucle.$OPTIND
es la cantidad de opciones encontradas porgetopts
.Como pauljohn32 menciona en los comentarios, estrictamente hablando,
OPTIND
da la posición del siguiente argumento de línea de comando.Del Manual de referencia de GNU Bash :
shift
nelimina n cadenas de la lista de parámetros posicionales. Así
shift $((OPTIND-1))
elimina todas las opciones que se han analizadogetopts
de la lista de parámetros y, después de ese punto,$1
se 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 (enbash
ydash
).$((...))
solo calcula cosas. En su caso, toma el valor de$optint
y resta 1.shift
elimina los parámetros posicionales. En su caso, elimina losoptint-1
parámetros.Para obtener más información echar un vistazo a
help getopts
,help shift
, verman bash
para "expansión aritmética", y especialmente Google paragetopts
.fuente