2015-05-05 82 views
0

我想改變別人的代碼。任何人都可以向我解釋這一行代碼嗎?使用。*在printf中

xs=`printf "%.*d" 3 $x` 

$x是循環變量,我明白這一點。

+0

另外:如果這是現代bash,'printf -v xs'%。* d'3「$ x」'是寫這個的更有效方法,避免了性能開銷一個子shell。 –

回答

4

.*是填充格式的一種方法。從Bash-hackers #The printf command

用於使用浮點或雙數可以通過 待指定的精度,其中是的位數精度數。 如果是一個星號(*),精度從 論點,即先於要打印的份數,像(打印 4,3000000000)讀:

printf的 「%* F \ n」 個10 4,3

所以說

xs=`printf "%.*d" 3 $x` 

$xs越來越存儲在$x與精度三位數的號碼。還需要注意的是it is best to use $()也引述參數:

xs=$(printf "%.*d" 3 "$x") 

看一些例子:

$ printf "%.*d\n" 3 1 
001 
$ printf "%.*d\n" 3 1234 
1234 

還有就是man printf更好的參考,這要歸功於亞倫Digulla在評論指向它:

精度

可選的精度,在後面是 可選十進制數字串的期間(「」)的形式。代替十進制數字串的一個 可以寫「*」或「* M $」(對於一些十進制整數m)至指定 精度在下一個參數給出,或者在第m個參數的, 分別它必須是int類型的。 (...)

+0

非常感謝! – Baloo

+1

在這種情況下,它不是精確的(這將在逗號後面),而是填充。 –

+0

@AaronDigulla你是對的。但是,我找不到合適的文檔引用([和它似乎是一個常見的問題!(http://unix.stackexchange.com/q/84148/40596)) – fedorqui

2

它顯示與0填充了大小的3個字符的整數。

$ x=4 
$ printf "%.*d" 3 $x 
004 

$ x=12 
$ printf "%.*d" 3 $x 
012 

$ x=9999 
$ printf "%.*d" 3 $x 
9999 
+0

非常感謝! – Baloo