Non, il n'y en a pas; voir §3.2.4 "Commandes composées" dans le Manuel de référence de Bash pour des informations sur les structures de contrôle qui font exister. Notamment, notez la mention de break
et continue
, qui ne sont pas aussi flexibles que goto
, mais sont plus flexibles dans Bash que dans certains langages, et peuvent vous aider à obtenir ce que vous voulez. (Tout ce que vous voulez . . .)
Si vous l'utilisez pour ignorer une partie d'un gros script pour le débogage (voir le commentaire de Karl Nicoll), alors si false pourrait être une bonne option (pas sûr que "false" soit toujours disponible, pour moi c'est dans /bin/false) :
# ... Code I want to run here ...
if false; then
# ... Code I want to skip here ...
fi
# ... I want to resume here ...
La difficulté survient lorsqu'il est temps d'extraire votre code de débogage. La construction "if false" est assez simple et mémorable, mais comment trouvez-vous le fi correspondant ? Si votre éditeur vous permet de bloquer l'indentation, vous pouvez indenter le bloc ignoré (vous voudrez alors le remettre lorsque vous aurez terminé). Ou un commentaire sur la ligne fi, mais il faudrait que ce soit quelque chose dont vous vous souviendrez, qui, je suppose, dépendra beaucoup du programmeur.
Cela peut en effet être utile pour certains besoins de débogage ou de démonstration.
J'ai trouvé cette solution de Bob Copeland http://bobcopeland.com/blog/2012/10/goto-in-bash/ élégante :
#!/bin/bash
# include this boilerplate
function jumpto
{
label=$1
cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
eval "$cmd"
exit
}
start=${1:-"start"}
jumpto $start
start:
# your script goes here...
x=100
jumpto foo
mid:
x=101
echo "This is not printed!"
foo:
x=${x:-10}
echo x is $x
donne :
$ ./test.sh
x is 100
$ ./test.sh foo
x is 10
$ ./test.sh mid
This is not printed!
x is 101