it-swarm.it

Bash: doppio uguale a -eq

Sto facendo il confronto dei numeri interi in bash (cercando di vedere se l'utente sta eseguendo come root) e ho trovato due modi diversi per farlo:

Doppio uguale:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

Capisco che non c'è> = o <= in bash, solo -ge e -le, quindi perché c'è un == se c'è un -eq?

C'è una differenza nel modo in cui confronta entrambe le parti?

49
beatgammit

== è un bash alias specifico per =, che esegue un confronto di stringhe (lessicale) anziché -eq confronto numerico. (È arretrato di Perl: gli operatori in stile Word sono numerici, quelli simbolici lessicali).

55
geekosaur

Per elaborare la risposta di bollovan ...

Non c'è >= o <= operatore di confronto per stringhe. Ma potresti usarli con il ((...)) comando aritmetico per confrontare numeri interi.

Puoi anche utilizzare gli altri operatori di confronto delle stringhe (==, !=, <, >, ma no =) per confrontare numeri interi se li usi all'interno di ((...)).

Esempi

  • Tutti e due [[ 01 -eq 1 ]] e (( 01 == 1 )) confronta i numeri interi. Entrambi sono veri.
  • Tutti e due [[ 01 == 1 ]] e [ 01 = 1 ] effettua confronti di stringhe. Entrambi sono falsi.
  • Tutti e due (( 01 -eq 1 )) e (( 01 = 1 )) restituirà un errore.

Nota: la sintassi della doppia parentesi [[...]] e la sintassi delle doppie parentesi ((...)) non sono supportati da tutte le shell.

13
toxalot

Se vuoi fare un confronto tra numeri interi dovrai usare meglio (()), dove puoi anche usare> = ecc.

Esempio:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi
7
bollovan