无论如何要传递一个变量给 bc,有一个要执行的命令?

无论如何要传递一个变量给 bc,有一个要执行的命令?

我需要传递某些变量才能bc获得浮点输出,

var1=$((<some operation>))
var2=$((<some operation>))      #Needs var1
var3=$((<some operation>))      #Needs var2
bc -l <<< $var3                 #Need output in Floating points

输出:

(standard_in) 1: illegal character: $

无论如何要克服这个?

更新:

diff=$(($epoc2-$epoc1))
var1=$(($diff / 60))
var2=$(($var1 / 57))
var3=`bc <<< 'scale=2; $var2'`

答案1

简单的引号不会扩展$变量。您必须使用双引号:

var3=`bc <<< "scale=2; $var2"`

另一方面,$var1并​​且$var2不会存储浮动(bash不管理它们),所以你bc改为。

diff=$(($epoc2-$epoc1))
var1=$(bc <<< "scale=3 ; $diff / 60")
var2=$(bc <<< "scale=3 ; $var1 / 57")
var3=$(bc <<< "scale=2; $var2")

答案2

由于单个刻度,表达式不会展开'

使用类似的东西:

var3=$(bc <<< "scale=2; $var2")

答案3

该错误消息意味着您的输入中有一个文字美元符号bc。在壳里,单引号保留每个字符的字面值。使用双引号插入变量:

bc <<< "scale=2; $var2"

不过,这可能不会得到您想要的输出,因为bc通常不会截断或填充输入值。您可以使用无操作除法来欺骗它:

bc <<< "scale=2; $var2 / 1"

这将在输出上强制执行 2dp 比例。


不过,在计算器中完成这一切会更简单(并且可能更准确) -var1var2都会有 Bash 和 POSIX sh 中整数除法的结果。

var3=`bc <<< "scale = 2 ; $diff / 60 / 57"`

这将给出数学上正确的答案,并进行适当舍入。如果您出于某种原因需要整数行为和bc缩放,则可以使用其他版本。

答案4

如果你的 bc 计算有点复杂,你也可以使用 HERE 文档来使其更具可读性:

var2=500
bc << EOF
scale=2
$var2 + 100
EOF

打印出来

600

相关内容