No hay gotoen bash.
Aquí hay algunas soluciones sucias trapque usan saltos solo hacia atrás :)
#!/bin/bash -e
trap '
echo I am
sleep 1
echo here now.
' EXIT
echo foo
goto trap 2> /dev/null
echo bar
Salida:
$ ./test.sh
foo
I am
here now.
Esto no debe usarse de esa manera, sino solo con fines educativos. Aquí es por qué esto funciona:
trapestá utilizando el manejo de excepciones para lograr el cambio en el flujo de código. En este caso, trapestá detectando cualquier cosa que provoque que el script salga. El comando gotono existe, y por lo tanto arroja un error, que normalmente saldría del script. Este error se está detectando trapy 2>/dev/nulloculta el mensaje de error que normalmente se mostraría.
Esta implementación de goto obviamente no es confiable, ya que cualquier comando inexistente (o cualquier otro error, de esa manera), ejecutaría el mismo comando trap. En particular, no puede elegir a qué etiqueta ir.
Básicamente, en un escenario real, no necesita ninguna instrucción goto, son redundantes ya que las llamadas aleatorias a diferentes lugares solo hacen que su código sea difícil de entender.
Si su código se invoca muchas veces, considere usar loop y cambiar su flujo de trabajo para usar continuey break.
Si su código se repite, considere escribir la función y llamarla tantas veces como desee.
Si su código necesita saltar a una sección específica basada en el valor de la variable, considere usar la caseinstrucción.
Si puede separar su código largo en partes más pequeñas, considere moverlo a archivos separados y llamarlos desde el script principal.
gotoen bash (al menos lo dicecommand not foundpara mí). ¿Por qué? Lo más probable es que haya una mejor manera de hacerlo.