2013-05-13 1 views
1

У меня есть десятичные числа, хранящиеся в строках.Как сделать восьмеричные числа как десятичные при выполнении арифметики в busybox 'ash

Номера < 100 хранятся таким образом "045" или "005".

При использовании этих числовых строк в арифметических операциях, таких как let A="045"+"009", эти числа рассматриваются как восьмеричные числа, как указано на странице руководства.

Лечить их как десятичные я добавил 10# в начале номера строк, как этот

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

, но это решение вызывает ошибку -ash: let: arithmetic syntax error в моей Баш из BusyBox (Installed на OpenWRT)

ли есть еще одно решение для моей загруженной оболочки?

Примечание: Операция должна оцениваться с помощью let, поскольку мне нужны номера тезисов в других операциях, таких как побитовая операция.

+1

Вы можете использовать 'expr' вместо этого? –

+0

@MichaelGardner Я хочу использовать поразрядную операцию по номерам тезисов. И expr не поддерживает побитовое управление – MOHAMED

ответ

0

Вы можете удалить нули, прежде чем делать арифметику:

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

Выход:

5 
+0

shopt не поддерживается – MOHAMED

+0

Hm. 'N1 = $ п; while [[$ n1 == 0 *]]; do $ n1 = $ {n1 # 0}; done' – choroba

2

busybox не bash, его оболочка ash.

Вы можете раздеться начальные нули с ваших переменных, например .:

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

или использовать expr:

$ echo $(expr 045 + 045) 
90 
+0

В моем ответе нет 'let'. Используйте 'expr' вместо' let'. –

+0

например: 'A =" $ (expr 045 + 045) "' –

+0

expr не поддерживает побитовые операции – MOHAMED