Bash 没有 goto 运算符。我有一个简单的任务,如果没有 goto 或添加新的 proc,我无法弄清楚如何解决它,这是不可取的。
我有两个条件和一个应该以这种方式工作的代码块:
[条件1]如果为真,运行一些命令并检查[条件2];如果为假,则执行一段代码。
[条件 2] 如果为真,则不执行相同的代码块;如果为假,则执行相同的块。
它是可解决的,还是我必须定义一些 proc 并exit
在那里使用?我使用了一个标志变量,但我不喜欢它。
如果 goto 可用,它看起来是这样的:
[ cond 1 ] || goto label 1
command
...
command
[ cond 2 ] && goto label 2
:label 1
block of code
:label 2
类似的东西。
在 shell 脚本中使用分支的典型方法是通过在主代码块之前声明的函数。但是,我认为这里的根本问题是逻辑问题,而不是 goto。显然
label 1
是重复的,所以这可以作为函数存在。而且,label 1
为了便于阅读,条件 2 可以变成一个函数:我注意到的是,在这两种情况下你都有
if false exec a block of code
和if false exec a block of code
,所以一个想法是开始检查这些条件是否都是错误的。但是,制作类似的东西if ! [ cond1 ] || ! [ cond2 ]
会改变分支逻辑。您仍然可以通过查看此帖子编辑历史来查看其伪代码版本。当我在桌面上从 Windows 迁移到 Linux 时,我有很多预先存在的
.BAT
文件和.CMD
要转换的文件,而且我不打算为它们重写逻辑,所以我找到了一种goto
在 bash 中运行的方法,因为自行goto function
运行sed
以去除脚本中不应运行的任何部分,然后对其全部进行评估。下面的源代码从原来的稍微修改,使其更健壮:
我一点也不感到内疚,正如 Linus Torvalds 的名言:
代码的原始来源 (经过修改以使其不易出错)
引用的来源
你应该把你
block_of_code
放入一个函数并使用一些 if/else: