所以我在这里遇到了一些麻烦 bash/bc 数学..
我正在尝试通过 rclone 将其移动到我的驱动器进行备份后打印备份的文件大小。所以我通过带有awk打印$ 1的rclone ls语句获得文件大小,效果很好。
在我的具体示例中,我得到 1993211(字节(的值。
因此,在我的打印代码中,我尝试将其除以1048576以将其转换为mb。这应该给我 1.9 mb。
然而$ expr 1993211 / 1048576 | bc -l
打印1
我已经尝试了这里列出的各种其他数学选项(包括通过python/node(,我总是得到1或1.0。这怎么可能?
计算应1993211 / 1048576 = 1.90087413788
知道这里发生了什么吗?
那是因为它做整数除法。 做浮点除法,你可以运行:
bc -l <<< '1993211 / 1048576'
返回:1.90087413787841796875
或者,您可以使用小数位数设置小数:
bc -l <<< 'scale=5; 1993211 / 1048576'
返回:1.90087
在命令expr 1993211 / 1048576 | bc -l
中,expr
使用整数除法将1993211除以1048576(因为这是expr
知道如何做的(,得到"1"作为结果,然后打印出来。bc -l
接收"1"作为输入,并且由于没有指定操作(expr
已经这样做了(,它只是打印它。
你想要的是将表达式"1993211/1048576"作为输入直接传递给bc -l
:
$ echo "1993211 / 1048576" | bc -l
1.90087413787841796875