![无论如何要传递一个变量给 bc,有一个要执行的命令?](https://linux22.com/image/63114/%E6%97%A0%E8%AE%BA%E5%A6%82%E4%BD%95%E8%A6%81%E4%BC%A0%E9%80%92%E4%B8%80%E4%B8%AA%E5%8F%98%E9%87%8F%E7%BB%99%20bc%EF%BC%8C%E6%9C%89%E4%B8%80%E4%B8%AA%E8%A6%81%E6%89%A7%E8%A1%8C%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我需要传递某些变量才能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 比例。
不过,在计算器中完成这一切会更简单(并且可能更准确) -var1
和var2
都会有 Bash 和 POSIX sh 中整数除法的结果。
var3=`bc <<< "scale = 2 ; $diff / 60 / 57"`
这将给出数学上正确的答案,并进行适当舍入。如果您出于某种原因需要整数行为和bc
缩放,则可以使用其他版本。
答案4
如果你的 bc 计算有点复杂,你也可以使用 HERE 文档来使其更具可读性:
var2=500
bc << EOF
scale=2
$var2 + 100
EOF
打印出来
600