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

时间:2013-05-13 12:55:19

标签: linux shell busybox openwrt ash

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

< 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进行评估,因为我需要在其他类型的操作中使用这些数字,例如按位操作。

2 个答案:

答案 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