我有十进制数字存储在字符串中。
< 100以"045"
或"005"
的方式存储。
在像let A="045"+"009"
这样的算术运算中使用这些数字字符串时,这些数字被视为八进制数字,如手册页中所示。
要将它们视为十进制,我在数字字符串的开头添加10#
,如
let A="10#045"+"10#123"
但是这个解决方案在BusyBox(安装在OpenWRT上)的bash中导致错误-ash: let: arithmetic syntax error
我的busybox shell还有其他解决方案吗?
注意:操作应该使用let
进行评估,因为我需要在其他类型的操作中使用这些数字,例如按位操作。
答案 0 :(得分:3)
busybox
没有bash
,其外壳为ash
。
您可以从变量中删除前导零,例如:
while [ "${n:0:1}" = "0" ]; do n="${n#?}"; done
或使用expr
:
$ echo $(expr 045 + 045)
90
答案 1 :(得分:0)
你可以在做算术之前删除零:
n=005
shopt -s extglob
n1=${n##+(0)}
echo $n1
输出:
5