forventet betinget binær operatør (Norsk)

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

Hvorfor får jeg «betinget binær operatør forventet». Jeg søkte allerede og. I. ser at [[]] er en testuttalelse, men hvorfor ville det ikke fungere?

Svar

  1. Du «mangler $ foran var når du kaller det, som du skrev det, vil det være bokstavelig talt var.
  2. Vurder mulige sårbarheter i skriptet ditt når du bruker [[ ... ]] eller (( ... )) sammen med variabler du ikke kan kontrollere. I ditt tilfelle kan det være bedre å bruke [ "$var" -ne 0 ].
  3. Du mangler et mellomrom mellom != og 0 (dette er kilden til feilen!)
  4. != er en strengesammenligningsoperatør , mens det kanskje fungerer i eksemplet ditt, vil du bruke -ne til å sammenligne heltall.

Bruk shellcheck .

Kommentarer

  • Merk t hatt (( var !=0 )) vil også fungere her, men som [[ "$var" -ne 0 ]] ville være et vilkårlig sårbarhet for kommandainjeksjon hvis arten av utdataene til kommandoen som fanges er ikke under din kontroll.
  • Takk St é phane for din innsikt. Anser du [[ "$var" -ne 0 ]] som utrygg? Hva med det samme uten sitater? Så hva synes du bør foretrekkes?
  • I [[ $var -ne 0 ]] (med eller uten anførselstegn, er anførselstegn ikke nødvendig i dette spesielle tilfellet) eller (( var!=0 )), innholdet i $var blir evaluert som et aritmetisk uttrykk og dårlige ting kan skje da . [ "$var" -ne 0 ] (sitatene er nødvendige her da [ er en vanlig kommando) er trygt i bash (men ikke alle andre skall), da $var bare tolkes som et desimaltall. [ "$var" != 0 ] (eller [[ $var != 0 ]] kshism) er også trygt, men vil være sant hvis $var inneholder 00 som det ' en streng sammenligning.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *