在 busybox' ash 下做算术时如何将八进制数视为十进制



我将十进制数字存储在字符串中。

<"045""005"以这种方式存储。>

let A="045"+"009"等算术运算中使用这些数字字符串时,这些数字被视为八进制数,如手册页所示。

为了将它们视为小数,我在数字字符串的开头添加了10#,如下所示

let A="10#045"+"10#123"

,但这个解决方案导致错误-ash: let: arithmetic syntax error在我的bash从BusyBox(安装在OpenWRT上)

是否有另一个解决方案为我的busybox外壳?

注意:该操作应该用let求值,因为我在其他类型的操作中需要这些数字,如按位操作

busybox没有bash,它的shell是ash

你可以去掉变量的前导零,例如:

while [ "${n:0:1}" = "0" ]; do n="${n#?}"; done

或使用expr:

$ echo $(expr 045 + 045)
90

你可以在做算术之前去掉0:

n=005
shopt -s extglob
n1=${n##+(0)}
echo $n1
输出:

5

最新更新