UNIX printf命令

语法

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  :以零填补输出,而非空白。这仅发生在字段宽度大于转换后的情况

posted @ 2013-06-08 17:35  顺水的船  阅读(384)  评论(0编辑  收藏  举报