Bash:评估一个数学术语?

发布于 2024-08-27 13:50:12 字数 69 浏览 11 评论 0原文

echo 3+3

如何在 Bash 中计算此类表达式(在本例中为 6)?

echo 3+3

How can I evaluate such expressions in Bash, in this case to 6?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

失眠症患者 2024-09-03 13:50:13

在这方面可能有用的一个用例是,如果您的操作数之一本身是 bash 命令,那么请尝试此操作。

echo $(( `date +%s\`+10 )) 甚至 echo $(( `date +%s\`+(60*60) ))

就我而言,我试图分别比当前时间晚 10 秒和 1 小时获取 Unixtime。

One use case that might be useful in this regard is, if one of your operand itself is a bash command then try this.

echo $(( `date +%s\`+10 )) or even echo $(( `date +%s\`+(60*60) ))

In my case I was trying to get Unixtime 10 seconds and hour later than current time respectively.

以为你会在 2024-09-03 13:50:13

我对数学处理的理解涉及浮点处理。

使用 bashj (https://sourceforge.net/projects/bashj/

bashj +eval "3+3"
bashj +eval "3.5*5.5"

>)您可以简单地使用或在 bashj 脚本中

#!/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

这种 java 调用:注意有趣的地方速度:每次调用约 10 毫秒(答案由 JVM 服务器提供)。

另请注意,u.doubleEval(1/2) 将提供 0.5(浮点)而不是 0(整数)

My understanding of math processing involves floating point processing.

Using bashj (https://sourceforge.net/projects/bashj/) you can call a java method (with floating point processing, cos(), sin(), log(), exp()...) using simply

bashj +eval "3+3"
bashj +eval "3.5*5.5"

or in a bashj script, java calls of this kind:

#!/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

Note the interesting speed : ~ 10 msec per call (the answer is provided by a JVM server).

Note also that u.doubleEval(1/2) will provide 0.5 (floating point) instead of 0 (integer)

赠佳期 2024-09-03 13:50:12
echo $(( 3+3 ))
echo $(( 3+3 ))
蔚蓝源自深海 2024-09-03 13:50:12

expr 是标准方式,但它只处理整数。

bash 有几个扩展,它们也只处理整数:

$((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(( )) 可用于赋值,例如

let a=3+3
((a=3+3))

对于浮点,您可以使用 bc

回声 3+3 |公元前

expr is the standard way, but it only handles integers.

bash has a couple of extensions, which only handle integers as well:

$((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 and (( )) can be used to assign values, e.g.

let a=3+3
((a=3+3))

for floating point you can use bc

echo 3+3 | bc

以歌曲疗慰 2024-09-03 13:50:12

在 zsh/ksh 等 shell 中,您可以使用浮点数进行数学计算。如果您需要更多数学能力,请使用诸如 bc/awk/dc 之类的工具

,例如

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

in shells such as zsh/ksh, you can use floats for maths. If you need more maths power, use tools like bc/awk/dc

eg

var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk 'BEGIN{print 3.4*43.1}')

looking at what you are trying to do

awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities
苍景流年 2024-09-03 13:50:12

您可以使用 expr 命令:

expr 3 + 3

要将结果存储到变量中,您可以执行以下操作:

sum=$(expr 3 + 3)

或者

sum=`expr 3 + 3`

You can make use of the expr command as:

expr 3 + 3

To store the result into a variable you can do:

sum=$(expr 3 + 3)

or

sum=`expr 3 + 3`
伤感在游骋 2024-09-03 13:50:12

有很多方法 - 最便携的是使用 expr 命令:

expr 3 + 3

Lots of ways - most portable is to use the expr command:

expr 3 + 3
菩提树下叶撕阳。 2024-09-03 13:50:12

我相信 ((3+3)) 方法是最快的,因为它是由 shell 而不是外部二进制文件解释的。
使用所有建议的方法对一个大循环进行计时,以获得最有效的效果。

I believe the ((3+3)) method is the most rapid as it's interpreted by the shell rather than an external binary.
time a large loop using all suggested methods for the most efficient.

十雾 2024-09-03 13:50:12

感谢 Dennis,解决了 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

Solved thanks to Dennis, an example of BC-use:

$ cat calc_velo.sh

#!/bin/bash

for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc 
done > ball_velocities
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文