1

我有条件测试。我希望变量 A 等于变量 B。在 A 等于 B 之前,可能需要快速连续进行几次测试。不过,我不希望它尝试超过 10 次。

A=1
B=2

while [ $A != $B ]
do
  echo "hi there"
done

所以很明显,除非 A 等于 B,否则它将继续循环。以防 A 不会很快等于 B,我想限制尝试的次数。我在想这样的事情:

A=1
B=2

COUNT=0
while [ "$COUNT" -le 10 ]
do
    while [ $A != $B ]
    do
      echo "hi there"
      COUNT=`expr $COUNT + 1`
    done

done

我在这里找到了类似问题的答案,但不完全是这个。谢谢!

4

2 回答 2

0
A=1
B=2

COUNT=0
while [ "$COUNT" -le 10 ] || [ $A != $B ]
do
  echo "hi there"
  COUNT=`expr $COUNT + 1`
done

如果我理解正确,您不想做太多循环,而是一个带有两个中断条件的循环。

于 2013-02-18T21:39:49.860 回答
0

while(以及许多其他复合命令)可以合法嵌套。您的逻辑不太适合您要完成的工作。

n=
while [[ $a != "$b" && ++n -le 10 ]]; do
    echo 'hi there'
done

对于纯粹的数字比较,[[[应该在 Bash 中使用。

for (( n = 0; a != b && ++n <= 10; )); do
    ...

有很多可能性。expr顺便说一句,除非您需要与古老的非 POSIX Bourne shell 兼容,否则不要使用或反引号。

于 2013-02-18T21:54:23.840 回答