いいえ、ありません; Bash リファレンス マニュアルの §3.2.4「複合コマンド」を参照してください。 行う制御構造についての情報 存在。特に、break
の言及に注意してください。 そして continue
、 goto
ほど柔軟ではありません ですが、一部の言語よりも Bash の方が柔軟であり、目的を達成するのに役立つ場合があります。 (あなたが望むものは何であれ. . .)
デバッグのために大きなスクリプトの一部をスキップするためにそれを使用している場合 (Karl Nicoll のコメントを参照)、false が適切なオプションである可能性がある場合 (「false」が常に利用可能かどうかはわかりません。私にとっては /bin/false にあります) :
# ... Code I want to run here ...
if false; then
# ... Code I want to skip here ...
fi
# ... I want to resume here ...
デバッグ コードを削除するときに問題が発生します。 「if false」構文は非常に単純で記憶に残りますが、一致する fi をどのように見つけるのでしょうか?エディターでインデントをブロックできる場合は、スキップしたブロックをインデントできます (完了したら元に戻す必要があります)。または、fi 行に関するコメントですが、それは覚えているものでなければならず、プログラマーに大きく依存すると思われます。
デバッグやデモンストレーションが必要な場合には、実際に役立つ可能性があります。
Bob Copeland のソリューション http://bobcopeland.com/blog/2012/10/goto-in-bash/ エレガント:
#!/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
結果:
$ ./test.sh
x is 100
$ ./test.sh foo
x is 10
$ ./test.sh mid
This is not printed!
x is 101