如何在Unix Shell脚本中用bc实现浮点运算并赋值给变量
在Shell中用
bc实现浮点运算并将结果赋值给变量 哈哈,这个坑我之前刚踩过!Shell本身确实只支持整数运算,浮点运算就得靠bc这个工具来搞定了,把运算结果赋值给变量其实非常简单,我给你分享几种常用的方法:
基础赋值方式(单行表达式)
用命令替换$()把bc的输出直接存到变量里,这是最常用的写法:# 计算2.5 + 3.7,结果存到result变量 result=$(echo "2.5 + 3.7" | bc) echo $result # 输出6.2原理就是用
echo把运算表达式传给bc,再通过命令替换捕获bc的输出结果,赋值给变量。指定运算精度
如果需要控制小数位数,可以用scale参数来设置,比如保留2位小数:# 计算10除以3,保留2位小数 result=$(echo "scale=2; 10 / 3" | bc) echo $result # 输出3.33scale的值就是你想要保留的小数位数,按需调整就行。复杂运算用Here-Doc更清晰
如果运算逻辑比较复杂(比如多行表达式),用Here-Doc的写法会更易读:result=$(bc << EOF scale=3 # 先算乘法再算加法,保留3位小数 (5.2 * 2) + (7.8 / 4) EOF ) echo $result # 输出12.950这种方式不需要把所有表达式挤在一行,适合写复杂的运算逻辑。
加载数学库做高级运算
如果需要平方根、三角函数这类高级运算,记得加-l参数加载bc的数学库:# 计算平方根,保留4位小数 SCALE=4 result=$(echo "scale=$SCALE; sqrt(2)" | bc -l) echo $result # 输出1.4142这里把精度值存成变量
SCALE,后续可以重复使用,更灵活。
另外提个小细节:如果你的运算里用到Shell变量,直接嵌入表达式就行,比如:
a=2.5 b=3.7 result=$(echo "$a * $b" | bc) echo $result # 输出9.25
内容的提问来源于stack exchange,提问作者Avitesh Kesharwani




