Shell脚本-while循环不会终止

时间:2019-03-05 02:01:46

标签: shell while-loop

我在shell中有一个while循环,即使它有中断条件,它也不会终止,这段代码在其他语言中也能很好地运行,但是我不知道while循环如何在shell脚本中运行。 这是我的代码:

NAME=""
while [[ $NAME != "q"  || $NAME != "Q" ]]
do
    read NAME
    //do something


done

1 个答案:

答案 0 :(得分:1)

$NAME != "q" || $NAME != "Q"

除非NAME可能以一种奇怪的“薛定ding之猫”状态存在,在这种状态下它既可以同时Q也可以q 表达式将始终是

考虑一下:

  • 如果NAME既不是 q也不是Q,则两个子表达式都将为true,因此完整表达式将为true。
  • 如果它是Q,则第一个子表达式将为true,导致整个表达式也为true。
  • 如果它是q,则第二个子表达式将为true,导致整个表达式也为true。

可能可能需要的是:

$NAME != "q" && $NAME != "Q"

当然,如果您使用的是bash,它提供了一种将字符串大写和小写的方法,以使这些比较容易:

while [[ "${NAME^^}" != "Q" ]] ; # upper-case variant
while [[ "${NAME,,}" != "q" ]] ; # lower-case variant