我想while循环中使用两个条件bash的努力得到一个简单的,但是从各种论坛尝试许多不同的语法后,我不能停止抛出一个错误。 以下是我有:
while [ $stats -gt 300 ] -o [ $stats -eq 0 ]
我也曾尝试:
while [[ $stats -gt 300 ] || [ $stats -eq 0 ]]
......还有其他几个人结构。 我想这个循环继续,而$stats is > 300
,或者$stats = 0
。
我想while循环中使用两个条件bash的努力得到一个简单的,但是从各种论坛尝试许多不同的语法后,我不能停止抛出一个错误。 以下是我有:
while [ $stats -gt 300 ] -o [ $stats -eq 0 ]
我也曾尝试:
while [[ $stats -gt 300 ] || [ $stats -eq 0 ]]
......还有其他几个人结构。 我想这个循环继续,而$stats is > 300
,或者$stats = 0
。
正确的选项是(增加推荐的顺序排列):
# Single POSIX test command with -o operator (not recommended anymore).
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 -o "$stats" -eq 0 ]
# Two POSIX test commands joined in a list with ||.
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 ] || [ "$stats" -eq 0 ]
# Two bash conditional expressions joined in a list with ||.
while [[ $stats -gt 300 ]] || [[ $stats -eq 0 ]]
# A single bash conditional expression with the || operator.
while [[ $stats -gt 300 || $stats -eq 0 ]]
# Two bash arithmetic expressions joined in a list with ||.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 )) || (( stats == 0 ))
# And finally, a single bash arithmetic expression with the || operator.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 || stats == 0 ))
一些注意事项:
引用内部的参数扩展[[ ... ]]
和((...))
是可选的; 如果变量没有被设置, -gt
和-eq
将假设值0。
使用$
是可选的内部(( ... ))
但使用它可以帮助避免无意的错误。 如果stats
不设置,那么(( stats > 300 ))
将承担stats == 0
,但(( $stats > 300 ))
会产生一个语法错误。
尝试:
while [ $stats -gt 300 -o $stats -eq 0 ]
[
是调用test
。 它不只是为分组,像在其他语言中括号。 检查man [
或man test
以获取更多信息。
关于你的第二个语法之外额外[]是不必要的,而且可能会混淆。 您可以使用它们,但如果你一定需要他们之间的空白。
或者:
while [ $stats -gt 300 ] || [ $stats -eq 0 ]