1

当我在变量busybox shell脚本中存储大值并打印时,它会打印-ve值。
我知道 shell 没有变量类型,但是如何避免这种折叠回 -ve 值?
我在 shell 中使用了以下命令命令,它打印 -ve 值。

# let b=3841982464
# echo $b
-452984832

有什么建议/指针吗?

编辑:
agilob 建议的答案适用于我原来的问题,但我的实际问题是,我最后一个到磁盘末尾 - 17kb 所以我使用如下命令

# b=$(($(blockdev --getsize64 /dev/mmcblk0) - $((17*1024))))
# echo $b
-453002240

所以仍然打印值 -ve :(,使用 expr 也会给出奇怪的结果,如下所示

# b=`expr $(blockdev --getsize64 /dev/mmcblk0) - 17408`
# echo $b
2147466239

回答实际问题
,所以 agilob 回答了原始问题,所以我接受了这个答案。我可以解决的实际问题如下,

# b=$(blockdev --getsize64 /dev/mmcblk0)
# echo $b
3841982464
# echo "$b 17408 - p" | dc
3841965056

AWK方式

我尝试按照 user1934428 的建议以 awk 方式进行操作,可以按如下方式完成,

# echo "$(blockdev --getsize64 /dev/mmcblk0) 17408" | awk '{ printf "%.0f", $1 - $2}'
3841965056#
4

2 回答 2

3

为什么不只是:

b=3841982464
echo $b
   => 3841982464
于 2015-08-10T12:33:12.810 回答
1

你基本上想用“任意长整数”做算术。这不是 bash 内置的(它使用 8 字节整数)。

我会将这些数字存储在普通环境变量中,并使用其他编程语言(例如 Ruby)来处理它们。

于 2015-08-10T13:06:58.280 回答