%d转换说明符的目的是验证实参是否完全由数字字符组成吗?


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

相关内容

最新更新