Linux 十进制值未在bash中打印?

Linux 十进制值未在bash中打印?,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我想对表达式求值并将输出显示为正确的小数点后3位,我尝试使用下面的代码,但它不起作用。请帮助我如何在bash中执行此操作 echo -e "Enter expression to calculate : \c" read num let a=num printf '%f\n' "$a" Input : 5+50*3/20 + (19*2)/7 Output : 17.000000 Desired Output : 17.929 例如,您可以: echo $num | bc 17.9

我想对表达式求值并将输出显示为正确的小数点后3位,我尝试使用下面的代码,但它不起作用。请帮助我如何在bash中执行此操作

echo -e "Enter expression to calculate : \c"
read num
let a=num
printf '%f\n' "$a"

Input :  5+50*3/20 + (19*2)/7

Output :  17.000000

Desired Output : 17.929

例如,您可以:

echo $num | bc 
17.92857142857142857142
使用
bc

echo 'scale=3; 5+50*3/20 + (19*2)/7' | bc -l
输出:

17.928 17.928
这是极少数允许shell变量扩展为awk脚本主体的一部分的情况之一:

$ num='5+50*3/20 + (19*2)/7'

$ awk 'BEGIN{print '"$num"'}'
17.9286

$ awk 'BEGIN{printf "%0.3f\n", '"$num"'}'
17.929

bash只能用整数计算,结果只能是整数。@Vijay:再加上Cyrus正确的说法:你的任务必须使用bash吗?如果您使用Zsh,您将拥有浮点。Korn(ksh)shell也支持浮点,我一直不明白为什么bash不支持。我一直不明白为什么需要浮点算术的人首先认为
bash
等是合适的。它们的设计是为了方便运行其他程序,而不是自己执行计算。思维良好。