2013-08-07 20 views
0

這是我的一段代碼:KSH + printf的:迫使輸入參數是十進制,不八進制

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

它只是在格式化M數爲2位,零填充數。 這可以正常工作,但有時M將包含一個已經填零的數字,例如008

在這種情況下,pritnf認爲,輸入數量爲八進制和轉換00800(如數字008並不在八進制存在!)

有沒有辦法迫使printf把它的輸入參數作爲小數,而不是八進制?

KSH版本:(AT & T研究所)93噸+ 2010-06-21
printf的版本:(AT & T研究所)2009-02-02

TIA。

回答

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}) 
+0

我想避免額外的腳本調用(如通過sed管道等)。我猜有沒有辦法強制printf直接採取值作爲十進制...... – ccbunney

+0

答案更新了一個解決方案沒有額外的腳本,只需聲明你的變量'-LZ'排版選項。 – jlliagre

+0

不錯的 - 效果很好。謝謝。 – ccbunney

相關問題