0

这是我的一段代码:

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

它只是将数字格式化M为 2 位数字,零填充数字。这很好用,但有时M会包含一个已经填充零的数字,例如008

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

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

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

TIA。

4

1 回答 1

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} )
于 2013-08-07T08:30:33.457 回答