ehdollinen binäärioperaattori odotettavissa

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

Miksi saan ”ehdollisen binäärioperaattorin odotettavissa”. Etsin jo ja. Katson, että [[]] on testilausunto, mutta miksi se ei toimisi?

Vastaa

  1. Sinä ”puuttuu $ varin edestä, kun kutsut sitä, kuten kirjoititkin, se on kirjaimellisesti var.
  2. Harkitse skriptisi mahdollisia haavoittuvuuksia käytettäessä [[ ... ]] tai (( ... )) yhdessä muuttujien kanssa, joita et voi hallita. Sinun tapauksessasi saattaa olla parempi käyttää [ "$var" -ne 0 ].
  3. Sinulta puuttuu väli != ja 0 (tämä on virheen lähde!)
  4. != on merkkijonojen vertailuoperaattori , vaikka se saattaa toimia esimerkissäsi, haluat käyttää -ne kokonaislukujen vertaamiseen.

Käytä -tarkistusta .

Kommentit

  • Huomautus t hat (( var !=0 )) toimisi myös täällä, mutta kuten [[ "$var" -ne 0 ]] olisi mielivaltainen komennon injektoinnin heikkous, jos kaapatun komennon lähdön luonne ei ole sinun hallinnassasi.
  • Kiitos St é phane oivalluksistasi. Pidätkö [[ "$var" -ne 0 ]] vaarallisena? Entä sama ilman lainausmerkkejä? Joten mitä mielestäsi tulisi pitää parempana?
  • [[ $var -ne 0 ]] (lainausmerkeillä tai ilman, lainausmerkit eivät ole tarpeen tässä tapauksessa) tai (( var!=0 )), $var -sisältö arvioidaan aritmeettisina lausekkeina ja voi tapahtua sitten huonoja asioita . [ "$var" -ne 0 ] (lainausmerkit ovat välttämättömiä, koska [ on tavallinen komento) on turvallinen kohdassa bash (mutta ei kaikkia muita kuoria), koska $var tulkitaan vain desimaalilukuna. [ "$var" != 0 ] (tai [[ $var != 0 ]] kshismi) on myös turvallinen, mutta palaa totta, jos $var sisältää 00, koska se ' sa merkkijonojen vertailu.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *