operatore binario condizionale previsto

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

Perché ricevo “operatore binario condizionale previsto”. Ho già cercato e. I. vedo che [[]] è unistruzione di prova, ma perché non dovrebbe funzionare?

Risposta

  1. Tu “re missing $ davanti a var quando lo chiami, come lhai scritto tu, sarà letteralmente var.
  2. Considera le possibili vulnerabilità del tuo script quando utilizzi [[ ... ]] o (( ... )) insieme a variabili che non puoi controllare. Nel tuo caso, potrebbe essere meglio usare [ "$var" -ne 0 ].
  3. Ti manca uno spazio tra != e 0 (questa è lorigine dellerrore!)
  4. != è un operatore di confronto di stringhe , anche se potrebbe funzionare nel tuo esempio, puoi utilizzare -ne per confrontare i numeri interi.

Utilizza shellcheck .

Commenti

  • Nota t hat (( var !=0 )) funzionerebbe anche qui, ma come [[ "$var" -ne 0 ]] sarebbe una vulnerabilità di iniezione di comando arbitrario se la natura delloutput del comando catturato non è sotto il tuo controllo.
  • Grazie St é phane per i tuoi approfondimenti. Consideri [[ "$var" -ne 0 ]] non sicuro? E lo stesso senza virgolette? Quindi, cosa pensi dovrebbe essere preferito?
  • In [[ $var -ne 0 ]] (con o senza virgolette, le virgolette non sono necessarie in questo caso particolare) o (( var!=0 )), i contenuti di $var vengono valutati come espressioni aritmetiche e possono succedere cose brutte . [ "$var" -ne 0 ] (le virgolette sono necessarie qui perché [ è un comando ordinario) è sicuro in bash (ma non tutte le altre shell), poiché $var viene interpretato solo come numero intero decimale. Anche [ "$var" != 0 ] (o [[ $var != 0 ]] kshism) è sicuro, ma restituirebbe true se $var contiene 00 in quanto ' sa confronto di stringhe.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *