我正在尝试更改其他人的代码。任何人都可以向我解释这行代码吗?
xs=`printf "%.*d" 3 $x`
$x
是循环变量,我明白这一点。
答案 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