GNU/Linux >> Znalost Linux >  >> Linux

Existuje příkaz goto v bash?

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

Linux
  1. Bash If-Else prohlášení s příklady

  2. 5 Příklady prohlášení o případu Bash

  3. Bash/sh příkaz „jestli je to jinak“.

  1. Jak používat příkaz if else Conditionals ve skriptu Bash

  2. Bash skriptování:Přesun z operátoru backtick do závorek $

  3. Bashová pole a záporné indexy, ano nebo ne?

  1. Prohlášení Bash if elif else:Komplexní návod

  2. 4 Příklady příkazů Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  3. BASH:odeslání signálu SIGTSTP (ctrl+z)