如何在Bash中使用逻辑非运算符处理复杂的条件表达式?

26

我想在Bash中对以下条件表达式使用逻辑非,该如何做?

if [[ $var==2 || $var==30 || $var==50 ]] ; then
  do something
fi

我该如何直接在上面的表达式中使用逻辑非运算符,而不是像这样再次将其改为非常麻烦的形式:

if [[ $var!=2 && $var!=30 && $var==50 ]] ; then
  do something
fi

谢谢任何提示!

1个回答

47
if ! [[ $var == 2 || $var == 30 || $var == 50 ]] ; then
  do something
fi

或者:

if [[ ! ($var == 2 || $var == 30 || $var == 50) ]] ; then
  do something
fi

一个好的实践是在条件运算符和操作数之间留有空格。

有些人也建议,如果你只是比较数字,使用算术运算符,或者只使用(( ))

if ! [[ var -eq 2 || var -eq 30 || var -eq 50 ]] ; then
  do something
fi

if ! (( var == 2 || var == 30 || var == 50 )) ; then
  do something
fi

虽然不值得赞扬或者应该注意的是,如果$var有时候不是数字或者没有值或未设置,因为它可能意味着0作为默认值或者另一个变量的另一个值(如果它是一个变量的名称)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接