paulo1205
(usa Ubuntu)
Enviado em 26/07/2023 - 03:12h
O Bash não faz aritmética de ponto flutuante nativamente.
Uma solução de contorno muito comum é usar comandos externos, tais como
awk ou
bc para efetuar os cálculos e imprimir os resultados em uma construção que intercepte a saída impressa, quer seja com algo como
`awk "{ print $dividendo/$divisor }"` ou
$(echo "$dividendo/$divisor" | bc -l).
O problema com essa abordagem é que cada conta feita dessa maneira provoca a criação de um ou mais
pipes e de um ou mais processos novos, e a invocação de comandos externos. Isso geralmente é mais custoso do que seria fazer a conta dentro do próprio
shell, principalmente se ocorrer muitas vezes dentro de laços de repetição.
Uma abordagem que eu acho mais interessante é usar um outro
shell para
scripts que precisem de aritmética de ponto flutuante. O ksh93, por exemplo, suporta ponto flutuante nativamente, e tem um conjunto de recursos muito parecido com o do Bash (com vantagens e desvantagens, como quase tudo na vida). Usar ksh93 é uma abordagem que eu já cheguei a usar algumas vezes, e recomendo se você pretende continuar programa usando
shell como base.
Outro
shell com suporte a ponto flutuante é o zsh. Eu, contudo, nunca o usei para valer, então não recomendo nem desencorajo seu uso. Deixo para quem o conhece melhor. Posso dizer, porém, que, nos breves testes que fiz com zsh para alguns
scripts meus, o desempenho do ksh93 foi sempre superior ao do zsh.
Alternativas potencialmente melhores e mais poderosas seriam outras linguagens de
scripts e
RAD, tais como o próprio
awk ou possivelmente Perl, Python, TCL ou qualquer outra que você queira.
Eu sou “perleiro”. Apesar de Perl ser uma linguagem tida como
feia (ou pelo menos mais feia do que Python — no que eu concordo), eu me acostumei com ela numa época em que ela era o motor dos
sites interativos na Internet, e PHP e Python não havia nem sido ainda inventados.. Tem postagens minhas aqui na comunidade mostrando, por exemplo, como um
script em Perl ficou 1500 vezes mais rápido do que em
shell mal escrito, e 30 vezes mais rápido do que em
shell bem escrito (
https://www.vivaolinux.com.br/topico/Shell-Script/Como-criar-um-script-para-localizar-varias-palavra...).
Shell é legal para orquestração de comandos externos, inclusive pelo meio do extraordinário recurso de fazer
pipelines. Para processamento matemático ou mais pesado, no entanto, claramente não é uma ferramenta muito adequada.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)