为什么我的 Shell 算术出现语法错误?

为什么我的 Shell 算术出现语法错误?

我的 Linux shell 脚本有问题 ( sh)。

我正在尝试编写一个计算组合的脚本,但我认为在尝试计算功能时会出现溢出。所以,我正在尝试另一种技术。在这个技术中我使用了这个:

a=`expr $var1 \* $var2 / $var3`

这会产生错误,显然我不能这样做:

a=`expr ($var1 \* $var2) / $var3`

因为这也会产生错误。

我该怎么做?

答案1

您可以用于dc任意精度结果:

precision=4 var1=3 var2=4 var3=5
a=`echo "$precision k $var1 $var2 * $var3 /p" | dc`

自 1977 年左右以来,它应该适用于几乎所有 Unix 变体。如果你知道你有 gnu dc 可用,那就更简洁了

a=`dc -e "$precision k $var1 $var2 * $var3 /p"`

可以使用。

答案2

对于带有括号的示例,您也必须转义它们:(expr \( $var1 + $var2 \) / $var3并且不要省略空格,否则expr会抱怨)。

bash还可以使用内置算术扩展,如下所示:echo $(( ($var1+$var2)/$var3 ))

对于中缀计算,有bc(而dc用于反向抛光表示法)。

相关内容