Tato otázka již má odpovědi zde : 
Komentáře
- stackoverflow.com/ a / 18668580/1032785
Odpověď
 Tyto operátory se používají např. v (( ... )) a $(( ... )) ( aritmetické hodnocení  a  aritmetické rozšíření ): 
if (( arg1 >= num1 )) && (( arg2 <= num2 )); then ... fi  A také s let. Toto je ekvivalent výše uvedeného: 
if let "arg1 >= num1" && let "arg2 <= num2"; then ... fi Viz část s názvem „ARITMETICKÉ HODNOCENÍ“ v příručce k bashům.
Odpovědět
 V bash konkrétně: 
-  ((arg1 >= num1))(zděděno zksh) provede aritmetické srovnání.arg1anum1zde odkazují na proměnné prostředí se stejným názvem. Každá proměnná je interpretována jako aritmetická expanze a výsledek nahrazen. Zde, pokud$arg1je010a$num1je4+5, výsledek bude false (příkaz((...))se vrátí se stavem nenulového ukončení), protože010je osmičkový pro 8 a4+5je 9.
-  (($arg1 >= $num1)): stejné jako výše, kromě toho$arg1a$num1se rozbalí, než se vyhodnotí celý aritmetický výraz. Pokud$arg1byl(2a$num1byl2), předchozí příkaz by selhal, protože(2a2)nejsou samy o sobě platné výrazy. Ale tady by to uspělo, protože(2 >= 2)by byl aritmetický výraz, který se hodnotí. Obecně je v aritmetických výrazech lepší$vynechat. Porovnejte napříklada=2+2; echo "$((3 * $a))"sa=2+2; echo "$((3 * a))".
-  let "..."(také z ksh). Stejné jako((...))kromě toho, že je to analyzován jako normální příkaz, je méně čitelný, je tak málo přenosný a je třeba věnovat větší pozornost citování.
-  [ "$arg1" -ge "$num1" ]. To je standardní a přenosné. Podporovány jsou pouze desetinné konstanty.[ 010 -ge 9 ]je stejný jako[ 10 -ge 9 ].
-  [[ $arg1 -ge $num1 ]]. Také z ksh, ale s velkými rozdíly. Tentokrát jsou považovány$arg1a$num1jako aritmetické výrazy a nejen desítkové konstanty.[[ 010 -ge 9 ]]vrátí opět hodnotu false.
-  [[ $arg1 < $num1 ]]. Porovnání řetězců. To používástrcoll()k porovnání řetězců, proto použijte třídicí algoritmus v národním prostředí. Všimněte si, že zatímco<a>použít třídicí algoritmus,=/==provést srovnání bajt-bajt, takže mohou existovat dvojice řetězců, pro které všechny<,>a=/==vrátí hodnotu false.<=a>=nejsou podporovány.
-  [ "$arg1" "<" "$num1" ]. Nestandardní. Stejné jako výše, ale pomocí příkazu[.<je třeba uvést, aby se nebral jako operátor přesměrování.
-  expr " $arg1" "<=" " $num1" > /dev/null(všimněte si vloženého mezery k vynucení lexikálního srovnání a vyhnutí se problémům s řetězci, které vypadají jakoexproperátory) neboawk "BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}" "$arg1" "$num1"jsou standardní příkazy pro porovnání řetězců pomocístrcoll().