Dělám celočíselné srovnání v bash (zkouším zjistit, zda uživatel běží jako root), a našel jsem dva různé způsoby, jak to udělat:
Dvojitá rovnost:
if [ $UID == 0 ] then fi 
-eq
if [ $UID -eq 0 ] then fi 
 Rozumím tomu, že existuje „no> = nebo < = v bash, pouze -ge a -le, tak proč existuje == if there „sa -eq? 
Existuje rozdíl ve způsobu, jakým srovnává obě strany?
Komentáře
Odpověď
 == je bash Specifický alias pro =, který namísto -eq numerického srovnání provede řetězcové (lexikální) srovnání. (Je to zpět z Perlu: operátory ve stylu slov jsou číselné, symbolické lexikální.) 
Komentáře
- Znamená to, že pokud obě strany jsou celá čísla, převede obě strany na řetězce a poté je porovná?
 -  Přesněji to ' je to naopak: všechno je řetězec, 
-eqříkábashinterpretovat řetězce jako celá čísla (vytváření0bez varování, pokud řetězec isn ' t numeric). -  @tjameson Uvedení příkladu: 
[ 01 -eq 1 ]ale[ 01 != 1 ]. -  Pamatujte, že zatímco 
==jako[operátor je nestandardní a měl by nelze použít, není to specifické pro bash . Bylo zavedeno ksh a je také podporováno zsh (i když je třeba uvést první=) , yash a obslužný program GNU[( a jakékoli takové nástroje implementované jako skripty ksh na některých systémech) alespoň). -  @geekosaur Dostanu varování z bash v4.3.42, pokud můj řetězec není ' t numeric: 
$ if [ "hello" -eq 0 ]; then echo true; fibash: [: ahoj: očekává se celočíselný výraz 
odpověď
Vypracovat odpověď bollovan …
 Neexistuje žádný >= nebo <= operátor porovnání řetězců. Můžete je však použít s ((...)) aritmetickým příkazem k porovnání celých čísel. 
 Můžete také použít další operátory porovnání řetězců (==, !=, <, >, ale ne =) k porovnání celých čísel, pokud je použijete uvnitř ((...)). 
Příklady
-  
[[ 01 -eq 1 ]]i(( 01 == 1 ))dělat celé číslo srovnání. Oba jsou pravdivé. -  Oba 
[[ 01 == 1 ]]a[ 01 = 1 ]provedou porovnání řetězců. Oba jsou nepravdivé. -  Oba 
(( 01 -eq 1 ))a(( 01 = 1 ))vrátí chybu. 
 Poznámka: Syntaxe dvojitých závorek [[...]] a syntaxe dvojitých závorek ((...)) nejsou podporovány všemi shelly. 
Komentáře
-  Pamatujte, že (kromě 
mksh/zsh(kromě v režimu POSIX (ačkoli to ' není funkce POSIX))),(( 010 == 10 ))vrátí false, protože010bude považováno za osmičkové číslo (8 v desítkové soustavě). -  Upozorňujeme, že zatímco většina 
test/[implementace nemají ' operátory>=/<=(yash' s[má však),exprmá takové operátory, i když to bude dělat ar ithmetické srovnání, pokud jsou argumenty rozpoznány jako čísla (expr 01 '>=' 1vrátí hodnotu true,expr X01 '>=' X1vrátí hodnotu false). 
Odpověď
Chcete-li provést celočíselné srovnání, použijte lepší (()), kde můžete také použít> = atd.
Příklad:
if (( $UID == 0 )); then echo "You are root" else echo "You are not root" fi 
Komentáře
-  Nebo 
(( UID == 0 ))nebo(( ! UID )), na tom záleží.((...))je nestandardní (funkcekshpodporovaná takébashazshs variacemi). 
[ $UID -eq 0 ], ne[ $UID -eq 0].