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