Bash 在执行计算时只给出整数作为输出,而不管输入如何

Tho*_*ney 1 command-line bash

当我输入以下命令时:

result=$(( ($1-32)*(5/9) ))
echo $result
Run Code Online (Sandbox Code Playgroud)

变量 result 始终计算为整数,无论​​方程是否计算为十进制数。为什么是这样?

ste*_*ver 9

bash壳本身只支持整数运算。特别是,由于 5 小于 9,(5/9)无论您的产品中的其他项如何,都将计算为零。

根据您的要求,您可以通过更改操作顺序来执行您想要的操作(仍然使用整数算术),即

$ bash -c 'echo $(( ($1-32)*(5/9) ))' bash 35
0
Run Code Online (Sandbox Code Playgroud)

如果你允许*/拥有它们的自然优先级

$ bash -c 'echo $(( ($1-32)*5/9 ))' bash 35
1
Run Code Online (Sandbox Code Playgroud)

因为(35-32)*515,当整数除以9产生时1。如果你真的想浮点运算,那么你可以使用一个外部程序,如bcawk

$ bash -c 'echo "scale = 2; ($1-32)*(5/9)" | bc' bash 35
1.65
Run Code Online (Sandbox Code Playgroud)

或切换到支持浮点运算的外壳,例如ksh

$ ksh -c 'echo $(( ($1-32)*5/9 ))' ksh 35.0
1.66666666666666667
Run Code Online (Sandbox Code Playgroud)

(注意使用参数35.0来强制浮点提升)。