条件付き二項演算子が必要です

var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi 

「条件付き二項演算子が必要です」というメッセージが表示されるのはなぜですか。すでに検索しました。 I. [[]]はテストステートメントですが、なぜ機能しないのですか?

回答

  1. あなた「あなたが書いたように、varを呼び出すと、varの前に$がありません。文字通り、varになります。
  2. [[ ... ]]または(( ... ))考えられる脆弱性を考慮してください。 div>を制御できない変数と一緒に使用します。この場合、[ "$var" -ne 0 ]を使用する方がよい場合があります。
  3. !=および0(これがエラーの原因です!)
  4. !=文字列比較演算子ですが、この例では機能する可能性がありますが、-neを使用して整数を比較する必要があります。

シェルチェックを利用します。

コメント

  • 注t hat (( var !=0 ))もここで機能しますが、[[ "$var" -ne 0 ]]のように、キャプチャされるコマンドの出力の性質があれば、任意のコマンドインジェクションの脆弱性になります
  • 洞察力を提供してくれたSt éファンに感謝します。 [[ "$var" -ne 0 ]]は安全ではないと思いますか?引用符なしで同じことはどうですか?では、何を優先すべきだと思いますか?
  • [[ $var -ne 0 ]](引用符の有無にかかわらず、この特定のケースでは引用符は必要ありません)または(( var!=0 ))$varの内容は算術式として評価され、悪いことが起こる可能性があります[ "$var" -ne 0 ][は通常のコマンドであるため、ここで引用符が必要です)はbash(他のすべてのシェルではありません)。$varは10進整数としてのみ解釈されるためです。 [ "$var" != 0 ](または[[ $var != 0 ]] kshism)も安全ですが、$varの場合はtrueを返します。 00が'文字列比較として含まれています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です