在printf中使用。*

时间:2015-05-05 13:14:50

标签: bash unix printf

我正在尝试更改其他人的代码。任何人都可以向我解释这行代码吗?

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

$x是循环变量,我明白这一点。

2 个答案:

答案 0 :(得分: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参考,感谢Aaron Digulla在评论中指出:

  

精确度

     

一个可选的精度,以句点('。')的形式后跟一个   可选的十进制数字串。而不是十进制数字串一个   可以写" *"或" * m $" (对于某些十进​​制整数m)来指定   精度在下一个参数或第m个参数中给出,   分别为int类型。 (...)

答案 1 :(得分:2)

它显示一个带有0填充的整数,大小为3个字符。

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

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

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