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+ 查看

启动你的 职业

通过完成课程并获得认证

立即开始
广告