GNU/Linux >> Linux の 問題 >  >> Linux

bashにgotoステートメントはありますか?

いいえ、ありません; Bash リファレンス マニュアルの §3.2.4「複合コマンド」を参照してください。 行う制御構造についての情報 存在。特に、break の言及に注意してください。 そして continuegoto ほど柔軟ではありません ですが、一部の言語よりも 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

Linux
  1. 4 Bash If ステートメントの例 ( If then fi, If then else fi, If elif else fi, Nested if )

  2. BASH:SIGTSTP シグナルを送信 (ctrl+z)

  3. bash 配列と負の添字、はいまたはいいえ?

  1. Bashスクリプトでifelse条件文を使用する方法

  2. Bashスクリプト:バッククォート演算子から$括弧への移動

  3. 例を含む Bash If-Else ステートメント

  1. Bash if elif elseステートメント:包括的なチュートリアル

  2. 5 Bash Case ステートメントの例

  3. Bash/sh 'if else' ステートメント