Jo, taky mě to hned napadlo, když jsem četl nadpis. Dost mě překvapilo, že autor nezačal právě bashem. Nicméně dc se jen tak něco nevyrovná. Aneb nejkratší implementace největšího společného dělitele:
echo 4357391619024 31809878751260 | dc -e '?[dSarLa%d0<a]dsax+p'
Bash (a napriklad i implementace vyrazu ve Vimu) ma jednu velkou nevyhodu: pracuje pouze v integer aritmetice. Je jasne, ze pro mnoho veci je to dostacujici, ale treba takovy prumer s echem nelze vykouzlit.
Ve Vimu, kdyz potrebuji narychlo neco spocitat, si sice posouvam desetinnou carku (treba delenec vynasobim tisici), ale tam to mnohdy naopak pretece pres horni mez integeru.
Co si budem povidat - v 90% skriptu mi naprosto staci scitani, odcitani a nasobeni, vyjimecne deleni a modulo. Kdyz vynechate tyhle jednoduchosti ktere umi primo bash, tak spousta lidi bude na kazdou blbost volat bc ;-)
No, ja krome toho scitani atd. nekdy potrebuju vytvaret ruzne reporty a tam se dost casto pouziva prumer. Jasne, neni to nic jine nez deleni, ale tady uz s celociselnou aritmetikou nevystacim. Takze si bud natvrdo posunu desetinnou carku treba o tri rady doleva (a potom ji tam slozite pri vypisu nacpu zpatky), nebo opravdu zavolam bc ci dc (podle momentalni nalady :-)
Pak by stalo za zvazeni, jestli shell script je ten pravy nastroj pro takovou praci. Precejen mame i jine skriptovaci jazyky, ktere se obvykle hodi na zpracovani dat lepe ;-)
Presne tak, proto je taky veskere zpracovani provadeno v shellu (proc to prepisovat) a matematicke vypocty provadi bc. Kdyz pisu "shell", tak tim myslim i dalsi z neho volane nastroje, typicky grep, sort a awk :-)