Linux 上的 bash 中是否有可用的 goto 語句?


長話短說,Linux 的 bash 沒有 goto 語句,而且官方文件中也沒有有關控制結構的資訊。還需要注意的是,我們可以使用 breakcontinue 語句來實現與 goto 語句相同的行為。

透過一些微調並在 bash 中使用簡單的 if 條件,可以實現 goto 的簡單行為。

指令碼看起來像這樣

# ... Code You want to run here ...

if false; then

# ... Code You want to skip here ...

fi

# ... You want to resume here ...

另一個想法是使用比上面提到的指令碼稍微複雜一點的 bash 指令碼,但效果很好。

#!/bin/bash

function goto
{
   label=$1
   cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
   eval "$cmd"
   exit
}
startFunc=${1:-"startFunc"}

goto $startFunc

startFunc:

x=100
goto foo

mid:
x=101
echo "Not printed!"

foo:
x=${x:-10}
echo x is $x

輸出

$ ./sample.sh
x is 100
$ ./sample.sh foo
x is 11
$ ./sample.sh mid
Not printed!
x is 101

更新於: 2021 年 7 月 31 日

2K+ 檢視

啟動你的 職業

透過完成課程並獲得認證

立即開始
廣告