Bash 循环过早中断时猛击

Bash 循环过早中断时猛击,bash,while-loop,Bash,While Loop,我对bash(一般编程)比较陌生,大部分时间都是自学的,但我有一个while循环,只有在满足所有条件时才应该退出 while [[ "$var1" != "$var1_tgt" ]] && [[ "var2" != "$var2_tgt" ]] && [[ "$var3" != "$var3_tgt" ]] && [[ "$var4" != "$var4_tgt" ]]; do LOOP...; done 我似乎(我认为)遇到的问题是对循环的评

我对bash(一般编程)比较陌生,大部分时间都是自学的,但我有一个while循环,只有在满足所有条件时才应该退出

while  [[ "$var1" != "$var1_tgt" ]] && [[ "var2" != "$var2_tgt" ]] && [[ "$var3" != "$var3_tgt" ]] && [[ "$var4" != "$var4_tgt" ]]; do LOOP...; done

我似乎(我认为)遇到的问题是对循环的评估。当我运行脚本时,如果只满足其中一个条件,它将中断,但我希望循环仅在满足所有条件时中断。也就是说,当所有变量的var#等于var#u tgt时,循环才应该中断。据我所知,使用“&&”应该意味着在循环退出之前必须满足所有条件,但它不起作用的事实意味着我遗漏了一些东西。非常感谢您能帮我解决这个问题。

您需要将循环更改为:

while  [[ "$var1" != "$var1_tgt" ]] || [[ "var2" != "$var2_tgt" ]] || [[ "$var3" != "$var3_tgt" ]] || [[ "$var4" != "$var4_tgt" ]]; do LOOP...; done
因为如果任何变量尚未达到其目标,则要继续循环


否则,一旦其中一个变量达到其目标,其中一个条件将失败,循环将中断。

您能帮助我们了解此脚本实际执行的操作吗?例如,您可能从
$var2\u tgt
匹配
$var
$var2\u tgt
匹配
$var2
开始,然后随着循环的进行,一个或多个变量将被更改,使它们不再匹配目标。如果他们不匹配,你就打破了循环。我说得对吗?如果是这样的话,你能给我们提供设置变量的示例代码,这样我们就可以测试事情是如何运行的吗?我推断他想继续循环,只要变量的和仍然在它们的目标上。一旦变量不再在目标上,循环就应该退出。如果我理解JollyRoger的困惑,这就是正确的答案。我的理解是,他将
while
子句作为循环的退出条件,但实际上是不退出条件。因此,他得到了“和”和“vs”或“向后”。我的回答是基于“当所有var的var等于var时,循环才应该中断”,我想我读对了?很抱歉混淆了。。。变量最初是从目标开始的,随着时间的推移,它们将达到目标,但不是同时达到所有目标。我希望循环仅在所有变量等于各自的目标后退出,而不是在只有一个变量达到各自的目标时退出。我希望这有助于澄清。如果没有,我将尽我所能帮助澄清更多。谢谢你的意见!我想马切尔库蒂斯可能已经回答了这个问题。他的推理听起来像是我在寻找的,但必须进行测试才能确定。