Ne není; viz §3.2.4 "Složené příkazy" v Bash Reference Manual informace o řídicích strukturách, které dělají existovat. Všimněte si zejména zmínky o break
a continue
, které nejsou tak flexibilní jako goto
, ale jsou v Bash flexibilnější než v některých jazycích a mohou vám pomoci dosáhnout toho, co chcete. (Cokoli chcete...)
Pokud jej používáte k přeskočení části velkého skriptu pro ladění (viz komentář Karla Nicolla), pak pokud by false mohla být dobrá volba (nejsem si jistý, zda je "false" vždy k dispozici, pro mě je v /bin/false) :
# ... Code I want to run here ...
if false; then
# ... Code I want to skip here ...
fi
# ... I want to resume here ...
Potíž nastává, když je čas vytrhnout váš ladicí kód. Konstrukce „pokud je nepravda“ je docela přímočará a zapamatovatelná, ale jak najdete odpovídající fi? Pokud vám váš editor umožňuje blokovat odsazení, můžete přeskočený blok odsadit (po dokončení jej budete chtít vrátit zpět). Nebo komentář k fi line, ale muselo by to být něco, co si budete pamatovat, což bude podle mého názoru velmi závislé na programátorech.
Skutečně může být užitečný pro některé potřeby ladění nebo demonstrace.
Našel jsem řešení Bob Copeland http://bobcopeland.com/blog/2012/10/goto-in-bash/ elegantní:
#!/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
výsledkem je:
$ ./test.sh
x is 100
$ ./test.sh foo
x is 10
$ ./test.sh mid
This is not printed!
x is 101