una terminos termino son semejante que parte matematica los literal lenguaje grado expresión expresion elementos determina cada algebraico algebraica bash math sh evaluation

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 ))