【发布时间】:2015-03-04 00:08:36
【问题描述】:
我试图了解 bash 中 if 和 while 语句的编码之间的区别。
在下面的脚本中,如果我使用IF,我会使用== 或-eq 等获得预期的结果。但是,对于所有测试,每个while 的while 循环似乎都评估为true。虽然循环 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循环位于该块下方的几行。可能您应该将它们移到开头,即while [[ condition ]]; do -
@Tom,感谢您的领导,下面的答案解释了诡计的情况一直延伸到 :do 并且我不明白。谢谢艺术
标签: bash comparison operators