A veces necesito dividir un número por otro. Sería genial si pudiera definir una función bash para esto. Hasta ahora, me veo obligado a usar expresiones como
echo 'scale=25;65320/670' | bc
pero sería genial si pudiera definir una función .bashrc que se pareciera a
divide () {
bc -d $1 / $2
}
command-line
function
arithmetic
bashrc
bc
ixtmixilix
fuente
fuente
ksh
, la variante 93, admite cadenas aquí.Bash puede hacer los cálculos en sí mismo hasta cierto punto. Sin embargo, no es útil para la precisión, ya que se redondea.
Pero tiene toda la razón: una función bash sería un acceso directo simple y su ejemplo básicamente funciona.
Tíralo en tu .bashrc y luego podrás:
fuente
echo $((10 / 5))
No necesita presupuesto.echo $((6383/7671))
te dará cero.echo $((6383.0/7671.0))
Probablemente conoces el bash 'expr' incorporado como en
que se limita a enteros y necesita los espacios entre los argumentos.
¿Qué le impide definir una función a lo largo de las líneas de la expresión de eco que ya está utilizando? Es decir
fuente
Realmente no es una respuesta a esta pregunta precisa, pero podría ser bueno saberlo. Uso
zsh
;-)fuente
expr
orden interna, por lo que buena respuesta independientemente :)Si ha
calc
instalado en su sistema y no le gusta redondear, puede:fuente
apcalc
(Arbitary Precision) ... El binario se llamacalc
calc
.Un truco sucio para valores pequeños y una precisión limitada sin usar bc sería, para multiplicar el nominador antes de la división, para obtener un resultado preciso.
Ejemplo sin precisión:
y con precisión de 2 dígitos: multiplique por 100 y mueva el punto decimal 2 pasos hacia la izquierda:
Esto solo es útil si el rango de números se conoce antes, y la precisión es siempre la misma. Evitar llamar a bc y llamar a sed no parece muy razonable.
Tenga en cuenta que multiplicar los valores puede provocar errores de desbordamiento, pero no muy pronto:
fuente
$[expression]
lugarThe old format $[expression] is deprecated and will be removed in upcoming versions of bash.
En lugar de usar bc, puedes usar awk:
fuente
fuente