gpt4 book ai didi

Bash 流量控制问题

转载 作者:行者123 更新时间:2023-11-29 09:46:53 25 4
gpt4 key购买 nike

我有一个 bash 流程控制问题,我已经用“while”解决了。这是一个简化得多的版本:

while :; do 
[[ $x = $y ]] || { echo x & y differ; break; };
[[ $v -ge $u ]] || { echo v is less than u; break; };
echo another test and code; break;
done;
echo end of tests

它由一系列不相关的测试和一些代码组成。测试必须按顺序进行,直到执行其代码。这些规则与“案例”相同,但我看不出如何将案例用于此类不相关的测试。请注意,虽然我使用了“while”,但不涉及循环。

除了函数之外,其他人在这种情况下会使用什么替代的简洁 bash 结构?

最佳答案

编辑:删除了指向已在此处删除的答案的链接。

我曾经在 C 语言中使用过大致相同的构造(一个带有大量 strcmp() 命令的 while 循环,并在找到正确的命令后中断),但后来我意识到它很糟糕(我什至通过使用将 SWITCH 定义为 while 命令的预编译器选项)。我的第二种方法稍微好一点但仍然很丑,用 Bash 翻译为:

# Set up testdata
i=1
j=2
k=3
l=4
m=5
n=6
p=1
# Continue testing until test succeeds
okfound=0
test okfound && okfound=$(test $i -eq $j) && echo "i = j"
test okfound && okfound=$(test $i -eq $k) && echo "i = k"
test okfound && okfound=$(test $i -eq $l) && echo "i = l"
test okfound && okfound=$(test $i -eq $m) && echo "i = m"
test okfound && okfound=$(test $i -eq $n) && echo "i = n"
test okfound && okfound=$(test $i -eq $p) && echo "i = p"
test okfound && okfound=$(test $i -eq $j) && echo "i = j"
echo "end of tests"

我在 C 代码中寻找这样的解决方案的主要原因是试图避免嵌套的 if-then-else 缩进。在 Bash 中你可以使用 elif,我认为你应该停止尝试寻找一个聪明的解决方案,而选择简单的

if   [ $i -eq $j ]; then echo "i = j"
elif [ $i -eq $k ]; then echo "i = k"
elif [ $i -eq $l ]; then echo "i = l"
elif [ $i -eq $m ]; then echo "i = m"
elif [ $i -eq $n ]; then echo "i = n"
elif [ $i -eq $p ]; then echo "i = p"
elif [ $i -eq $j ]; then echo "i = j"
fi

关于Bash 流量控制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com