ksh + printf:强制输入参数为十进制,而不是八进制

时间:2013-08-07 08:16:05

标签: shell printf ksh

这是我的代码:

MBR=$( printf %02d ${M} )

只是将M中的数字格式化为2位数,零填充数字。 这样可以正常工作,但有时M将包含一个已填零的数字,例如008

在这种情况下,pritnf认为输入数字是八进制并将008转换为00(因为数字008在八进制中不存在!)

有没有办法强制printf将其输入参数作为十进制而不是八进制?

Ksh版本:( AT& T Research)93t + 2010-06-21
printf版本:(AT& T Research)2009-02-02

TIA。

1 个答案:

答案 0 :(得分:1)

更新为当前的ksh版本:

$ echo $KSH_VERSION
Version JM 93u+ 2012-02-29
$ M=008
$ MBR=$( printf %02d ${M} )
$ echo $MBR                
08

或者,剥离前导0

$ /usr/bin/printf "%02d\n" $(echo ${M} | sed 's/^00*//')
08

或没有任何外部命令:

$ typeset -LZ M
...
$ M=008
$ MBR=$( printf %02d ${M} )