我正在尝试更改别人的代码。谁能向我解释这条代码?
xs=`printf "%.*d" 3 $x`
$x
是循环变量,我确实知道。
.*
是一种填充格式的方法。来自bash-backers#the printf命令:
可以通过 使用。 如果是星号(*),则从 在要打印的数字之前的参数(如打印) 4,3000000000):
printf"%。*f n" 10 4,3
这样说
xs=`printf "%.*d" 3 $x`
$xs
以三位精度存储在$x
中的数字。还请注意,最好使用$()
并引用参数:
xs=$(printf "%.*d" 3 "$x")
请参阅一些示例:
$ printf "%.*dn" 3 1
001
$ printf "%.*dn" 3 1234
1234
man printf
有更好的参考,这要归功于Aaron Digulla在评论中指向它:
精度
可选的精度,以周期('。')的形式 可选的十进制数字字符串。而不是十进制数字字符串 可以写入"*"或"*m $"(对于某些小数点内M $)以指定 精度是在下一个参数中给出的 分别必须是INT类型。(...)
它显示一个带有3个字符的0个填充的整数。
$ x=4
$ printf "%.*d" 3 $x
004
$ x=12
$ printf "%.*d" 3 $x
012
$ x=9999
$ printf "%.*d" 3 $x
9999