Às vezes, preciso dividir um número por outro. Seria ótimo se eu pudesse definir uma função bash para isso. Até agora, sou forçado a usar expressões como
echo 'scale=25;65320/670' | bc
mas seria ótimo se eu pudesse definir uma função .bashrc que parecia
divide () {
bc -d $1 / $2
}
command-line
function
arithmetic
bashrc
bc
ixtmixilix
fonte
fonte
ksh
, a variante 93, suporta as strings aqui.O Bash pode fazer as próprias contas em certa medida. Não é útil para precisão, no entanto, à medida que arredonda.
Mas você está exatamente certo - uma função bash seria um atalho simples e seu exemplo basicamente funciona.
Jogue isso no seu .bashrc e então você pode:
fonte
echo $((10 / 5))
não precisa de cotação.echo $((6383/7671))
dará zero. Você precisa ser explícito sobre os números de ponto flutuante:echo $((6383.0/7671.0))
Você provavelmente conhece o bash 'expr' como em
que é limitado a números inteiros e precisa dos espaços entre os argumentos.
O que impede você de definir uma função nas linhas da expressão de eco que você já está usando? Ou seja,
fonte
Não é realmente uma resposta para essa pergunta precisa, mas pode ser bom saber. Use
zsh
;-)fonte
expr
embutido, então boa resposta independentemente :)Se você
calc
instalou no seu sistema e não gosta de arredondamentos, pode:fonte
apcalc
(Precisão Arbitária) ... O binário é chamadocalc
calc
.Um truque sujo para valores pequenos e uma precisão limitada sem o uso de bc seria, multiplicar o nomeador antes da divisão, para obter um resultado preciso.
Exemplo sem precisão:
e com precisão de 2 dígitos: multiplique por 100 e mova o ponto decimal 2 etapas para a esquerda:
Isso só é útil se o intervalo de números for conhecido antes e a precisão for sempre a mesma. Evitar chamar bc e chamar sed não parece muito razoável.
Observe que multiplicar os valores pode levar a erros de estouro, mas não muito cedo:
fonte
$[expression]
em vezThe old format $[expression] is deprecated and will be removed in upcoming versions of bash.
Em vez de usar o bc, você pode usar o awk:
fonte
fonte