在POSIX shell脚本中,我想在字符串操作和使用seq -w
的简单计算中使用由$(( ... ))
生成的十进制数字。这会因为带有前导零的数字被解释为八进制数而中断。我想出了这样的东西来实际获得十进制数......
for n in $(seq -w 0 300); do
str="xxx $n"
dec=$(echo $n | sed -e 's,00*\(..*\)$,\1,')
...
done
...但我想知道是否有更容易/更明显的方法来做到这一点。
答案 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