2016-06-01 1 views
0

私は次のコードにAND、OR条件文の

elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then 

を持っている場合には条件は、テキスト2が着陸しなければならないとtext4が失敗またはnullことができるのいずれかです。 上記のコマンドを評価する方法。

Imが一緒に事前

答えて

1

あなたが明示的にグループにそれらを必要とする:

elif [ "$text2" = 'LANDING' ] && 
     { [ "$text4" = 'FAIL' ] || [ "$text4" = '' ]; }; then 

あなたの試みでしょう次の2つの条件のいずれかが成立した場合:

  1. text2土地およびtext4は、FAIL
  2. text4は空または設定されていませんでした。

&&||が同じ優先順位を持っているので、あなたは(おそらく驚くほど)、グループ化せずにそれを書くことができます:

elif [ "$text4" = '' ] || [ "$text4" = FAIL ] && [ $text2 == 'LANDING' ]; then 

あなたがbashを使用している場合は、代わりに[ ... ][[ ... ]]コマンドを使用することができます。グループ分けは必須です。 [[ ... ]]doの演算子は、他の言語よりも優先されます(つまり、a || b && ca || (b && c)で、(a || b) && cではありません)。

elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then 
0

使用グループに中括弧や括弧||オペランドのいずれかの間違った 感謝をしている場合は助けてください。括弧はよりよく見えますが、非効率なサブシェルが作成されるため、中括弧は醜いにもかかわらず移動する方法です。

elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then 

中括弧には余分なセミコロンが必要です。また

、あなたが少しきれいにするためにできるように二重の角括弧を使用することができますbashのを使用している場合:

elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then 
1

特にお勧めしますが、bashので、あなたが[[...]]

elif [[ $text2 == 'LANDING' && $text4 == @(FAIL|) ]]; then 
で拡張グロブパターンを使用できるわけではありません