var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi
「条件付き二項演算子が必要です」というメッセージが表示されるのはなぜですか。すでに検索しました。 I. [[]]はテストステートメントですが、なぜ機能しないのですか?
var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi
「条件付き二項演算子が必要です」というメッセージが表示されるのはなぜですか。すでに検索しました。 I. [[]]はテストステートメントですが、なぜ機能しないのですか?
(( var !=0 ))
もここで機能しますが、[[ "$var" -ne 0 ]]
のように、キャプチャされるコマンドの出力の性質があれば、任意のコマンドインジェクションの脆弱性になります[[ "$var" -ne 0 ]]
は安全ではないと思いますか?引用符なしで同じことはどうですか?では、何を優先すべきだと思いますか?[[ $var -ne 0 ]]
(引用符の有無にかかわらず、この特定のケースでは引用符は必要ありません)または(( var!=0 ))
、$var
の内容は算術式として評価され、悪いことが起こる可能性があります。[ "$var" -ne 0 ]
([
は通常のコマンドであるため、ここで引用符が必要です)はbash
(他のすべてのシェルではありません)。$var
は10進整数としてのみ解釈されるためです。[ "$var" != 0 ]
(または[[ $var != 0 ]]
kshism)も安全ですが、$var
の場合はtrueを返します。00
が'文字列比較として含まれています。