web-dev-qa-db-ja.com

Bashの複雑な条件式で論理否定演算子を使用するにはどうすればよいですか?

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

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

上記の式に直接ではなく論理を追加する方法を教えてください。これを次のように変更するのは非常に面倒です。

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

ヒントをありがとう!

18
wiswit
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を意味するか、別の変数の別の値を意味する可能性があるためです。

31
konsolebox