我在shell中有一个while循环,即使它有中断条件,它也不会终止,这段代码在其他语言中也能很好地运行,但是我不知道while循环如何在shell脚本中运行。 这是我的代码:
NAME=""
while [[ $NAME != "q" || $NAME != "Q" ]]
do
read NAME
//do something
done
答案 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