我正在尝试从以下内容中获取一个浮点数:
totalmark=$(expr $sum / $subjects )
这是正确的吗?
bash不支持浮点数,可以使用awk或bc/dc。
例如,使用awk:
totalmark=$(awk 'BEGIN{print $sum / $subjects}')
或者bc
totalmark=$(echo "scale=2;$sum/$subjects"|bc)
如果你有使用除了bash以外的其他shell的机会,可以尝试使用zsh或ksh。
$ zsh -c 'echo $((4/1.3))'
3.0769230769230766
$ ksh -c 'echo $((4/1.3))'
3.07692307692307692
我认为Bash没有浮点数的功能。你可以尝试以下方法:
echo "$sum/$subjects" | bc -l
totalmark=$(echo "scale=4;$sum/$subjects"|bc)
顺便提一下,有三个答案说Bash不支持浮点运算。虽然这是正确的,但expr
是一个外部程序(对于我来说是/usr/bin/expr
),特别是在这种情况下不支持浮点数。
bc
默认的精度为scale=0
,Q 不需要这个。使用 -lq
选项传递参数。 - Charles Stewart--mathlib
选项(-l
)提供了一个默认值为scale = 20
(至少在我的系统上,使用bc 1.06.94)。不过,--quiet
选项是个好主意。 - Dennis Williamsonscale=20
是过度强大了,但所需的信息在那里,我倾向于在输出中有噪音而不是在shell脚本中有噪音。 - Charles Stewart