【发布时间】:2020-06-30 19:31:48
【问题描述】:
我正在尝试编写一个脚本来返回磁盘的大小(以字节为单位)。到目前为止,一切都很好。然后,我想尽可能以人类可读的单位显示它,而不是试图显示百万分之一 TB 的小尺寸,也不是以字节为单位的太字节值。因此,如果字节数高于 1024,请尝试 KB,如果该数字高于 1024,请尝试 MB,等等。出于说明目的,我的实际值为 10632563023872。
每个人都说尽可能使用双括号。我的大部分脚本都是用双括号写的。但在这种情况下,数学根本没有按照我期望的方式工作,所以也许有人可以帮助我理解我所缺少的。整个脚本还有很多内容,但我设法将我的问题隔离为一行:
num=10632563023872;
if [[ $num -lt 1024 ]];
then echo "$num is less than 1024";
else echo "$num is greater than 1024";
fi
输出:
10632563023872 is less than 1024
虽然 shellcheck 说语法很好,但数学显然是(?)错误的,除非我遗漏了某种数据类型问题,但是在 bash 中没有声明变量和数据类型。如果我用括号尝试这个,我会得到正确的答案,尽管抛出了一个错误,我已经确认它只是返回 false,因为它不喜欢我的输入:
num=10632563023872;
if (( $num -lt 1024 ));
then echo "$num is less than 1024";
else echo "$num is greater than 1024";
fi
-sh: 10632563023872: not found
10632563023872 is greater than 1024
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。