格式字符
格式符 | 说明 | 格式符 | 说明 |
%a | 将参数按double解释,并以C99十六进制浮点常量形式打印 | %i | 与%d相同 |
%A | 与%a相同,但打印的格式化后字符串中字母大写 | %n | 将到目前为止打印的字符数赋值给对应参数中指定的变量。不能指定数组索引。如果指定的变量是数组,则会将值赋值给数组的第0个元素。 |
%b | 将参数中支持的反斜杠转义字符转以后再打印 | %o | 将参数按无符号八进制数打印 |
%c | 将参数按char解释,只打印参数的第一个字符 | %q | 将参数按可以做为shell输入重用的格式打印 |
%d | 将参数按有符号十进制整数打印 | %s | 将参数按字面意思解释为字符串 |
%e | 将参数按double解释,并以科学计数法的形式打印 | %(FORMAT)T | 输出使用strftime(3)格式化字符串FORMAT格式化后的日期-时间字符串。参数为自纪元起的时间秒数,此外有两个特殊值:-1表示当前时间,-2表示shell启动时间。如果没有提供参数,则默认使用当前时间。strftime(3)日期时间格式字符串支持除%N、%:z、%::z、%:::z外的所有date命令日期时间输出格式符。 |
%E | 与%e相同,但打印的格式化后字符串中字母大写 | %u | 将参数按无符号小数打印 |
%f | 将参数按浮点数打印 | %x | 将参数按无符号十六进制数打印 |
%g | 将参数按double解释,并以%e或%f的形式打印 | %X | 与%x相同,但打印的格式化后字符串中字母大写 |
%G | 与%G相同,但是%E的形式打印 | %% | 不做任何转换,输出百分号% |
格式修饰符
修饰符 | 说明 |
<N> | 指定域最小宽度,如果打印的文本较短,则用空格填充,如果打印的文本较长,则正常打印。 |
. | 与域宽度一起使用,当打印的文本较长时会截断文本。如果“.”后没有指定宽度,默认为0,则不会打印文本。如果“.”前也指定了宽度,则会在截断文本后补足到指定的宽度。如:printf "%2.1s\n" abc。 |
* | 宽度在字符串或数字之前通过参数指定,可以动态的指定打印文本的宽度。如:printf "%*s\n" 20 "test"。 |
# | 数字格式选择符,见后面数字格式选择。 |
- | 左对齐,即右侧填充字符,默认为右对齐。如:printf "%-*s\n" 20 "test"。 |
0 | 用零填充数字,而不是空格。如:printf "%010d\n" 123。 |
(空格) | 如果杀死正数,前面加空格,如果是负数前面加“-”。如:printf "% d\n" 123。 |
+ | 打印数字的符号,正数前加“+”,负数前加“-”。如:printf "%+d\n" 123。 |
' | 将十进制数按当前LC_NUMERIC将千位分组分隔符应用于输出的整数部分,如:printf "%'d\n" 12345567890。 |
数字格式选择
格式 | 说明 |
%#o | 八进制数总是以0开头,除非它本身是零,如:printf "%o\n%#o\n" 123 123。 |
%#x、%#X | 十六进制数总是以“0x”/“0x”开头,除非它是零,如:printf "%x\n%#x\n" 123 123。 |
%#g、%#G | 打印的浮点数后面跟随0,直到满足精度所需的位数为止,如printf "%g\n%#g\n" 123 123。 |
小数格式的精度是通过“.”后面跟着精度位数来定义的,如printf "%.4f\n" 1.23。还可以通过“.*”来从参数中获取精度,然后再打印小数。如:printf "%.*f\n" 10 1.23。