printf "This is a number: %dn" 10
> This is a number: 10
我的理解是%d表示:参数是一个整数。但是参数(10)不是一个整数,它是一个由两个字符组成的字符串:'1'和'0'。%d的目的是检查参数以确保字符串完全由数字字符组成?尽管它被称为"转换规范"实际上没有发生任何转换,对吧?
Shell不是c语言,你不能把一个32/64位的整数传递给Shell的printf
,因为它只接受字符串。
Bash的printf
在无效输入时报告错误,所以它可以用来验证数字:
$ printf '%dn' abc
bash: printf: abc: invalid number
0
$ echo $?
1
$ printf '%dn' 123abc
bash: printf: 123abc: invalid number
123
$ echo $?
1
但是我认为当你想以特定的格式打印一些东西时,它更有用:
$ printf '%8dn' 0x100
256
$ printf '%#08xn' 12345
0x003039
$ printf '%.2fn' 123.456
123.46