概述
printf
命令是一个比 echo
更丰富的格式化输出命令,仿照了 C 语言的 printf()
函数的功能。
参考资料:
- Linux printf command
语法
该命令的语法如下:
printf FORMAT [ARGUMENT]...
printf OPTION
该命令支持的选项有:
选项 | 说明 |
---|---|
–help | 查看帮助信息 |
–version | 查看版本信息 |
如果要进行换行或者用制表符分隔字符串,需要在 FORMAT
中使用转义字符。支持的转义有:
转义字符 | 说明 |
---|---|
\a | 警告字符,通常为ASCII的BEL字符 |
\b | 后退 |
\c | 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 |
\f | 换页(formfeed) |
\n | 换行 |
\r | 回车(Carriage return) |
\t | 水平制表符 |
\v | 垂直制表符 |
\ | 一个字面上的反斜杠字符 |
\ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |
\0ddd | 表示1到3位的八进制值字符 |
除了上面的转义符之外,还必须要有格式占位符,比如用 "%s"
表示一个字符串。支持的格式占位符有:
格式占位符 | 说明 |
---|---|
%d | 将参数打印为十进制整数 |
%f | 将参数打印为浮点数 |
%s | 将参数打印为字符串 |
%x | 将参数打印为十六进制整数 |
%o | 将参数打印为八进制整数 |
事实上,上面的格式占位符是由百分号 %
和转换字符(如 d
、s
等)组成的。上面只是常用的形式,而真正的格式应该是以 %
开头,以转换字符结尾。在 %
和转换字符之间可能有,按顺序:
符号 | 说明 |
---|---|
- |
表示左对齐,如果没有则表示默认右对齐 |
number |
指定字符宽度的整数,如果不足该指定宽度则以空格进行填充 |
. |
一个句点,将字段宽度与精度分开 |
number |
一个整数,精度,它指定要从字符串中打印的最大字符数,或浮点值的小数点后的位数,或整数的最小位数 |
h 或 l |
分别区分短整数和长整数,并且通常仅用于计算机编程 |
如 %-10s
表示一个宽度为 10 个字符的字符串(-
表示左对齐,没有则表示右对齐),如果不足则自动以空格表示,如果超过则会将内容全部显示出来。
如 %4.2f
表示格式化为小数,其中 .2
表示保留两位小数。
pintf
命令默认是不换行的,如果需要换行则需要使用转义字符\n
。echo
命令默认就换行。
使用
格式化输出
示例:
printf "name:%s\tgender:%s\tage:%d\tscore:%.2f\n" 张三 f 18 66.5
如果在脚本中使用,可以传递变量。例如:
#!/bin/bash
msg="hello world"
printf "%s\n" "$msg"