script - pasar parametros por bash
¿Por qué los getopts solo funcionan la primera vez? (1)
Necesita agregar esta línea en la parte superior de su función:
OPTIND=1
De lo contrario, la invocación sucesiva de la función en el shell no restablecerá esto ya que la función se ejecuta en el mismo shell cada vez.
Según la
help getopts
:
Cada vez que se invoca,
getopts
colocará la siguiente opción en la variable de shell$name
, inicializando el nombre si no existe, y el índice del siguiente argumento a procesar en la variable de shellOPTIND
.OPTIND
se inicializa a1
cada vez que se invoca el shell o un script de shell.
¿Por qué esta opción solo funciona la primera vez que se usa y luego se ignora cada dos veces? Es como si se restableciera cuando la opción no se usa.
Aquí está mi función:
testopts() {
local var="o false"
while getopts "o" option; do
case "${option}" in
o)
var="o true"
;;
esac
done
echo $var
}
Al ejecutarlo, solo devuelve verdadero cuando se pasa la opción por primera vez.
$ testopts o false $ testopts -o o true $ testopts -o o false