2014-02-20 2 views
2

В сценарии оболочки POSIX я хотел бы использовать десятичные числа, сгенерированные seq -w как в строковых манипуляциях, так и в простых вычислениях с использованием $((...)). Это ломается, потому что числа с ведущими нулями интерпретируются как восьмеричные числа. Я придумал что-то вроде этого на самом деле получить десятичных чисел ...Есть ли простой способ заставить оболочку POSIX интерпретировать числа с ведущими нулями как десятичными?

for n in $(seq -w 0 300); do 
    str="xxx $n" 
    dec=$(echo $n | sed -e 's,00*\(..*\)$,\1,') 
    ... 
done 

... но мне интересно, если есть более простой/более очевидный способ сделать это.

ответ

2

Используйте вместо этого expr. например, вместо

for n in $(seq -w 0 10); do echo $n $((n + 4)); done 

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

for n in $(seq -w 0 10); do echo $n $(expr $n + 4); done 
1

Вместо того, чтобы генерировать 0 ДОПОЛНЯЮЩИЕ строки с seq, генерировать десятичные числа и пэд их нули с printf при необходимости.

for n in $(seq 0 300); do 
    padded_n=$(printf '%03' "$n") 
    ... 
done 

Надеюсь, вы знаете верхнюю границу заранее. Если нет, вы можете использовать что-то более уродливое, например

upper_bound=300 
for n in $(seq 0 $upper_bound); do 
    padded_n=$(printf "%0${#upper_bound}d" "$n") 
    ... 
done