语法
printf format [string …]
用途
进行格式输出
printf 中的转义序列
\a :警告字符,通常为ASII的BEL字符
\b :后退
\c :抑制(不显示)输出结果中的任何结尾的换行字符,而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f :换页(formfeed)
\n :换行
\r :回车
\t :水平制表符
\v :垂直制表符
\\ :一个字面上的反斜线字符
\ddd :表示1到3位数八进制值字符。仅在格式字符串中有效
\0ddd :表示1到3位的八进制值字符
printf对转义序列的处理可能会让人觉得混淆。默认情况下,转移序列只在格式字符串中会被特别对待,也就是说,出现在参数字符串里的转义序列不会被解释:
> printf "a string, no processing: <%s>\n" "A\nB"
>a string, no processing: <A\nB>
当你使用 %b 格式指示符时,printf 会解释参数数字符串中的转义序列
> printf "a string, no processing: <%s>\n" "A\nB"
>a string, no processing: <A
B>
无论是在格式字符串内还是在使用 %b 所打印的参数字符串里,大部分的转移序列都是被相同对待。
printf 格式指示符
%b :相对应的参数被视为含有要被处理的转义序列的字符串
%c :ASCII字符,显示相对应参数的第一个字符
%d,%i :十进制整数
%e,%E,%f :浮点格式
%g :%e或者%f转换,看那一个较短,则删除结尾的零
%G :%E或者%f转换,看那一个较短,则删除结尾的零
%o :不带正负号的八进制值
%s :字符串
%u :不带正负号的十进制值
%x :不带正负号的十六进制值,使用a至f表示10至15
%X :不带正负号的十六进制值,使用A至F表示10至15
%% :字面意义的%
printf 命令可用来指定输出字段的宽度以及进行对齐操作,完整的格式表达式如下:
%flags width.precision format-specifier
输出字段中的 width 为数字值。指定字段宽度时,字段的内容默认为向右对齐,如果你希望文字向左靠齐,必须指定 - 为标志,如果字符串少于宽度值时,默认情况下将以空白填充
>printf "|%10s|\n" hello
>| hello|
>printf "|%-10s|\n" hello
>|hello |
precision修饰符是可选用的。对十进制或者浮点数值而言,它可以控制数字出现于结果中的位数,对字符串而言,他控制将要打印的字符串的最大字符数。
>printf "%.5d\n" 15
>00015
>printf "%.10s\n" "a very long string"
>a very lon
> printf "%.2f\n" 123.4567
>123.46
printf 的标志
- :将字段里已经格式化的值向左对齐
空白(space) :在正值前置一个空格,在负值前值一个负号
+ :总是在数值之前放置一个正号或者负号,即便是正值也是
# :下列形势选择其一:%o有一个前置的o;%x与%X分别有前置的ox与OX,%e,%E与%f总是在结果中有一个小数点,%g与%G为没有结尾的零。
0 :以零填补输出,而非空白。这仅发生在字段宽度大于转换后的情况