it-swarm-eu.dev

Bash: dvojnásobek se rovná vs-ekv

Dělám celočíselné srovnání v bashu (snažím se zjistit, zda uživatel běží jako root) a našel jsem dva různé způsoby, jak to udělat:

Dvojnásobek se rovná:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

Chápu, že v bash není> = nebo <=, pouze -ge and -le, tak proč je == pokud existuje -eq?

Existuje rozdíl ve způsobu, jakým porovnává obě strany?

49
beatgammit

== je bash- specifický alias pro =, které provádí řetězcové (lexikální) srovnání namísto -eq numerické srovnání. (Je to zpět od Perla: operátory ve stylu Word jsou číselné, symbolické lexikální.)

55
geekosaur

Rozpracovat bollovanova odpověď ...

Tady není žádný >= nebo <= operátor porovnání řetězců. Ale můžete je použít s ((...)) aritmetický příkaz k porovnání celých čísel.

Můžete také použít jiné operátory porovnání řetězců (==, !=, <, >, ale ne =) pro porovnání celých čísel, pokud je používáte uvnitř ((...)).

Příklady

  • Oba [[ 01 -eq 1 ]] a (( 01 == 1 )) provádí celočíselná srovnání. Oba jsou pravdivé.
  • Oba [[ 01 == 1 ]] a [ 01 = 1 ] porovnávejte řetězce. Oba jsou nepravdivé.
  • Oba (( 01 -eq 1 )) a (( 01 = 1 )) vrátí chybu.

Poznámka: Syntaxe dvojité závorky [[...]] a syntaxe dvojitých závorek ((...)) nejsou podporovány všemi shelly.

13
toxalot

Pokud chcete provést celočíselné srovnání, budete lépe používat (()), kde můžete také použít> = atd.

Příklad:

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