Bash:评估一个数学术语?
如何在Bash中计算这些表达式,在本例中为6?很多方法-最方便的方法是使用以下命令: 您可以使用以下命令:Bash:评估一个数学术语?,bash,math,sh,evaluation,Bash,Math,Sh,Evaluation,如何在Bash中计算这些表达式,在本例中为6?很多方法-最方便的方法是使用以下命令: 您可以使用以下命令: echo $(( 3+3 )) 要将结果存储到变量中,可以执行以下操作: expr 3 + 3 或 expr是标准方式,但它只处理整数 bash有几个扩展,它们也只处理整数: sum=`expr 3 + 3` let和(())可用于赋值,例如 $((3+3)) returns 6 ((3+3)) used in conditionals, returns 0 for true
echo $(( 3+3 ))
要将结果存储到变量中,可以执行以下操作:
expr 3 + 3
或
expr
是标准方式,但它只处理整数
bash有几个扩展,它们也只处理整数:
sum=`expr 3 + 3`
let
和(())
可用于赋值,例如
$((3+3)) returns 6
((3+3)) used in conditionals, returns 0 for true (non-zero) and 1 for false
let 3+3 same as (( ))
对于浮点,您可以使用bc
echo 3+3 | bc在zsh/ksh等壳中,可以使用浮点数进行数学运算。如果您需要更多的数学能力,请使用诸如
bc/awk/dc
乙二醇
看看你想做什么
var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk 'BEGIN{print 3.4*43.1}')
多亏了Dennis,BC使用的一个例子:
awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities
我相信((3+3))方法是最快的,因为它是由shell而不是外部二进制文件来解释的。
使用所有建议的方法对大循环计时,以获得最高效。我对数学处理的理解涉及浮点处理 使用bashj()您可以使用
$ cat calc_velo.sh
#!/bin/bash
for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc
done > ball_velocities
或者在bashj脚本中,java调用这种类型:
bashj +eval "3+3"
bashj +eval "3.5*5.5"
注意有趣的速度:每次调用约10毫秒(答案由JVM服务器提供)
还请注意,u.doubleEval(1/2)将提供0.5(浮点)而不是0(整数)在这方面可能有用的一个用例是,如果操作数本身是bash命令,请尝试此操作
echo$(`date+%s\`+10))
甚至echo$(`date+%s\`+(60*60))
在我的例子中,我试图使Unixtime分别比当前时间晚10秒和1小时。请将这一点放到您的问题中。另外,您可以只使用一个awk命令。它解析文件,并处理十进制数学。查看我的答案。您正在使用重定向操作符
,它每次都会截断(覆盖)目标文件。将其更改为追加运算符>
,或者将重定向置于完成后而不是bc
之后,如下所示:done>ball\u
。您知道AWk的注释标志吗?如果我想有一个明确规定的测量格式?只看专栏会让人困惑,我不明白。在你的问题中举例说明你的意思——管道的力量|bc
获得我个人的认可,OP特别询问bash*nix进程,正是出于这个原因,nix进程被设计为极其轻量级和快速。因此,考虑到常见用法的总体脚本性能,使用外部二进制文件并不是很慢。我想补充一点(因为这篇文章显然是针对Unix初学者的),最后一行的倒勾是这样的:shell在赋值sum之前计算epr 3+3
。expr不仅处理整数,而且在expr之后才工作。expr(“0.5”\<20),此表达式可以直接当作条件使用。
var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk 'BEGIN{print 3.4*43.1}')
awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities
$ cat calc_velo.sh
#!/bin/bash
for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc
done > ball_velocities
bashj +eval "3+3"
bashj +eval "3.5*5.5"
#!/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