是否有一种简单的方法可以让POSIX shell将前导零的数字解释为十进制?

时间:2014-02-20 15:22:52

标签: shell arithmetic-expressions

在POSIX shell脚本中,我想在字符串操作和使用seq -w的简单计算中使用由$(( ... ))生成的十进制数字。这会因为带有前导零的数字被解释为八进制数而中断。我想出了这样的东西来实际获得十进制数......

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

...但我想知道是否有更容易/更明显的方法来做到这一点。

2 个答案:

答案 0 :(得分: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 :(得分:1)

不是使用seq生成0填充字符串,而是生成十进制数字,并在必要时用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