Menu

Aritmetika v shellu

Aritmetika pro začátečníky

Kdykoliv shell narazí na výskyt $(( ... )), nahradí text uvnitř závrek jeho aritmetickým vyčíslením. Uvnitř se smí používat proměnné, celočíselné konstanty, aritmetické operátory +-*/%, bitové operátory &|^, >>, <<, logické operátory && a ||, ternární operátor expr?expr:expr, operátory porovnání a přiřazení a libovolné množství mezer.

Uvnitř $(( ... )) nemusíme (ale můžeme) používat $ před jménem proměnné, protože jediné řetězce znaků, které se smí uvnitř vyskytnout jsou právě jména proměnných. Aritmetická expanze umí pracovat pouze s celými čísly. I dělení je pouze celočíselné.

i=$((i+1))    ≈    i=$(($i+1))
x=$((2*3+1-i))
max=$(( a>b ? a : b ))

Aritmetika pro pokročilé

Potřebujeme-li pracovat s desetinnými čísly, mocnit je nebo dělat další operace, které aritmetická expanze nezvládá, můžeme se obrátit na program bc. Jedná se o kalkulátor s libovolnou přesností. Pokud spustíte bc bez parametrů, přepne se do interaktivního módu a očekává vstup z klávesnice. Můžeme mu ale také poslat výraz na standardní vstup a výsledek si přečíst ze standardního výstupu. Jediné co bc oproti aritmetické expanzi postrádá jsou bitové operátory.

Standardně počítá bc s přesností na 0 desetinných míst. Použití přepínače -l ji zvýší na 20. Pokud chceme počítat na jiný počet desetinných míst, můžeme to bc dát na vědomí nastavením scale:

echo "2*3-5+$y" | bc
printf "%s\n" 'scale = 50; 104348/33215' | bc