23

bash で次の条件式を論理否定にしたいのですが、どうすればよいですか?

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

上記の式に論理的ではない直接を追加するにはどうすればよいですか。次のようなものに再度変更するのは非常に面倒です。

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

ヒントをありがとう!

4

1 に答える 1

44
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または別の変数の別の値を意味する可能性があるため、数値ではないか、値がないか、設定されていない場合がある場合は注意が必要です.

于 2013-09-16T14:03:31.200 に答える