Usando a própria aritmética de zsh
, você poderia fazer:
calc() printf '%.6g\n' $(($*))
alias 'calc=noglob calc'
Mas isso significaria que você precisaria inserir números como 123.
para que eles fossem considerados como ponto flutuante e acionassem um cálculo de ponto flutuante.
Você poderia contornar isso anexando .
a qualquer sequência de dígitos decimais que não faça parte de um número hexadecimal (ou número em outra base) ou de um nome de variável ou 12e-20
tipo números como:
setopt extendedglob
calc() printf '%.6g\n' $((${*//(#bm)(([0-9.]##[eE][-+][0-9]##|[[:alnum:]_#]#[.#_[:alpha:]][[:alnum:]_#]#)|([0-9]##))/$MATCH${match[3]:+.}}))
alias 'calc=noglob calc'
Nesse momento, você pode achar mais fácil usar bc
e aparar os 0s seguintes.
Veja também awk
:
calc() awk "BEGIN{print $*}"
que suporta menos operadores e funções matemáticas, mas pode ser suficiente para você.