bash while 循环比较未评估

bash while loop comparison not evaluating

我试图理解 bash 中 ifwhile 语句编码之间的区别。 在下面的脚本中,如果我使用 IF 我会使用 ==-eq 等得到预期的结果。但是对于 while 循环,每个 while 似乎对所有评估都是正确的测试。虽然循环 1 和 3 应该失败,正确吗?

A != B, 
A == B,
A == C

我尝试了 [ "" "" ][[ "" "" ]] 等的不同组合

while

的正确语法是什么

谢谢 艺术

#!/bin/sh
set -x
myVarA="abc"
myVarB="abc"
myVarC="def"

while [[ ${myVarA} != ${myVarB} ]]
    echo "A does not equal B"
    i=$(($i+1))
    do sleep 1s
    break
done

while [[ ${myVarA} == ${myVarB} ]]
    echo "A does equal B"
    i=$(($i+1))
    do sleep 1s
    break
done

while [[ ${myVarA} == ${myVarC} ]]
    echo "A does equal C"
    i=$(($i+1))
    do sleep 1s
    break
done

呈现以下内容,

+ myVarA=abc
+ myVarB=abc
+ myVarC=def
+ [[ abc != abc ]]
+ echo 'A does not equal B'
A does not equal B
+ i=1
+ sleep 1s
+ break
+ [[ abc == abc ]]
+ echo 'A does equal B'
A does equal B
+ i=2
+ sleep 1s
+ break
+ [[ abc == def ]]
+ echo 'A does equal C'
A does equal C
+ i=3
+ sleep 1s
+ break

您的 do 关键字 严重 错位。

whiledo 之间的所有内容都是条件列表。

所以你在第一个块中的条件列表是

[[ ${myVarA} != ${myVarB} ]]; echo "A does not equal B"; i=$(($i+1))

,如您所想,计算结果为 true,因为 i=$(($i+1)) 计算结果为 true

其他块也是如此。

do 移动到 while 行的末尾

while [[ ${myVarA} != ${myVarB} ]]; do
    : do something
done