bash while 循环比较未评估
bash while loop comparison not evaluating
我试图理解 bash 中 if
和 while
语句编码之间的区别。
在下面的脚本中,如果我使用 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
关键字 严重 错位。
while
和 do
之间的所有内容都是条件列表。
所以你在第一个块中的条件列表是
[[ ${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
我试图理解 bash 中 if
和 while
语句编码之间的区别。
在下面的脚本中,如果我使用 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
关键字 严重 错位。
while
和 do
之间的所有内容都是条件列表。
所以你在第一个块中的条件列表是
[[ ${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