Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:评估一个数学术语?_Bash_Math_Sh_Evaluation - Fatal编程技术网

Bash:评估一个数学术语?

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

如何在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 (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