bash - terminos - termino algebraico y expresion algebraica
Bash: evaluar un término matemático? (8)
echo 3+3
¿Cómo puedo evaluar tales expresiones en Bash, en este caso a 6?
Creo que el método ((3 + 3)) es el más rápido, ya que es interpretado por el shell en lugar de un binario externo. tiempo un gran bucle utilizando todos los métodos sugeridos para el más eficiente.
De muchas maneras, la mayoría de las portátiles es usar el comando expr :
expr 3 + 3
El uso puede hacer uso del comando expr como:
expr 3 + 3
Para almacenar el resultado en una variable puedes hacer:
sum=$(expr 3 + 3)
o
sum=`expr 3 + 3`
Mi comprensión del procesamiento matemático implica el procesamiento de punto flotante.
Usando bashj ( https://sourceforge.net/projects/bashj/ ) puede llamar a un método java (con procesamiento de punto flotante, cos (), sin (), log (), exp () ...) usando simplemente
bashj +eval "3+3"
bashj +eval "3.5*5.5"
o en un script bashj, java llamadas de este tipo:
#!/usr/bin/bashj
EXPR="3.0*6.0"
echo $EXPR "=" u.doubleEval($EXPR)
FUNCTIONX="3*x*x+cos(x)+1"
X=3.0
FX=u.doubleEval($FUNCTIONX,$X)
echo "x="$X " => f(x)=" $FUNCTIONX "=" $FX
Tenga en cuenta la velocidad interesante: ~ 10 ms por llamada (la respuesta la proporciona un servidor JVM).
Tenga en cuenta también que u.doubleEval (1/2) proporcionará 0.5 (punto flotante) en lugar de 0 (entero)
Resuelto gracias a Dennis, un ejemplo de uso de BC:
$ cat calc_velo.sh
#!/bin/bash
for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc
done > ball_velocities
en shells como zsh / ksh, puedes usar flotadores para las matemáticas. Si necesita más poder matemático, use herramientas como bc/awk/dc
p.ej
var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk ''BEGIN{print 3.4*43.1}'')
mirando lo que estas tratando de hacer
awk ''{printf "%.2f/n",$0/59.5}'' ball_dropping_times >bull_velocities
expr
es la forma estándar, pero solo maneja enteros.
bash tiene un par de extensiones, que solo manejan enteros también:
$((3+3)) returns 6
((3+3)) used in conditionals, returns 0 for true (non-zero) and 1 for false
let 3+3 same as (( ))
let
y (( ))
se pueden usar para asignar valores, por ejemplo,
let a=3+3
((a=3+3))
para punto flotante puedes usar bc
echo 3 + 3 | antes de Cristo
echo $(( 3+3 ))