如何在 shell 脚本变量中存储大值
How to store big values in shell script variable
当我在变量 busybox shell 脚本中存储大值并打印时,它会打印 -ve 值。
我知道 shell 没有变量类型,但是我该如何避免这种折叠回 -ve 值?
我在 shell 中使用了以下命令命令,它打印了 -ve 值。
# let b=3841982464
# echo $b
-452984832
有 suggestion/pointer 吗?
编辑:
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", - }'
3841965056#
为什么不只是:
b=3841982464
echo $b
=> 3841982464
你基本上想用 "arbitrary long integers" 做算术运算。这不是内置于 bash(它使用 8 字节整数)。
我会将数字存储在普通环境变量中,并使用其他编程语言(例如 Ruby)来处理它们。
当我在变量 busybox shell 脚本中存储大值并打印时,它会打印 -ve 值。
我知道 shell 没有变量类型,但是我该如何避免这种折叠回 -ve 值?
我在 shell 中使用了以下命令命令,它打印了 -ve 值。
# let b=3841982464
# echo $b
-452984832
有 suggestion/pointer 吗?
编辑:
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", - }'
3841965056#
为什么不只是:
b=3841982464
echo $b
=> 3841982464
你基本上想用 "arbitrary long integers" 做算术运算。这不是内置于 bash(它使用 8 字节整数)。
我会将数字存储在普通环境变量中,并使用其他编程语言(例如 Ruby)来处理它们。