forventet betinget binær operatør

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

Hvorfor får jeg “betinget binær operatør forventes”. Jeg søgte allerede og. I. ser at [[]] er en testerklæring, men hvorfor fungerer det ikke?

Svar

  1. Dig “mangler $ foran var, når du kalder det, som du skrev det, vil det bogstaveligt talt være var.
  2. Overvej mulige sårbarheder i dit script, når du bruger [[ ... ]] eller (( ... )) sammen med variabler, du ikke kan kontrollere. I dit tilfælde kan det være bedre at bruge [ "$var" -ne 0 ].
  3. Du mangler et mellemrum mellem != og 0 (dette er kilden til fejlen!)
  4. != er en strengesammenligningsoperatør , mens det muligvis fungerer i dit eksempel, vil du bruge -ne til at sammenligne heltal.

Brug shellcheck .

Kommentarer

  • Bemærk t hat (( var !=0 )) ville også fungere her, men ligesom [[ "$var" -ne 0 ]] ville være en vilkårlig sårbarhed ved kommandoindsprøjtning, hvis arten af output af kommandoen, der fanges er ikke under din kontrol.
  • Tak St é phane for din indsigt. Anser du [[ "$var" -ne 0 ]] som usikker? Hvad med det samme uden tilbud? Så hvad synes du skal foretrækkes?
  • I [[ $var -ne 0 ]] (med eller uden anførselstegn, er citaterne ikke nødvendige i dette særlige tilfælde) eller (( var!=0 )), indholdet af $var vurderes som et aritmetisk udtryk, og dårlige ting kan ske så . [ "$var" -ne 0 ] (citaterne er nødvendige her, da [ er en almindelig kommando) er sikkert i bash (men ikke alle andre skaller), da $var kun fortolkes som et decimaltal. [ "$var" != 0 ] (eller [[ $var != 0 ]] kshism) er også sikkert, men ville vende tilbage, hvis $var indeholder 00 som det ' en strengesammenligning.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *