OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

printf - 格式化和打印数据

与本章中的其他命令不同, 的printf command 不用于管道(它不接受标准输入),也不直接在命令行上找到频繁的应用程序(它主要用于脚本)。 那么为什么重要呢? 因为它被广泛使用。

printf(来自短语“print formatted”)最初是为 C 编程语言开发的,并已在包括 shell 在内的许多编程语言中实现。 事实上,在 bash 中,printf 是一个内置函数。

printf 的工作方式如下:

打印“格式= 参数

该命令被赋予一个包含格式描述的字符串,然后将其应用于参数列表。 格式化的结果被发送到标准输出。 这是一个简单的例子:



[我@linuxbox ~]$ printf "我格式化了字符串:%s\n" foo

我格式化了字符串:foo

[我@linuxbox ~]$ printf "我格式化了字符串:%s\n" foo

我格式化了字符串:foo


格式字符串可能包含文字文本(如“I formatted the string:”)、转义序列(如 \n, 换行符),以及以 % 字符,被称为 转换规格. 在上面的例子中,转换规范 %s 用于格式化字符串“foo”并将其放置在命令的输出中。 又来了:



[我@linuxbox ~]$ printf "我将 '%s' 格式化为字符串。\n" foo

我将 'foo' 格式化为字符串。

[我@linuxbox ~]$ printf "我将 '%s' 格式化为字符串。\n" foo

我将 'foo' 格式化为字符串。


如我们所见, %s 转换规范被命令输出中的字符串“foo”替换。 s 转换用于格式化字符串数据。 对于其他类型的数据,还有其他说明符。 下表列出了常用的数据类型:


表 21-4:常用 printf 数据类型说明符


说明符 说明

说明符 说明

d 将数字格式化为有符号十进制整数。


图片

f 格式化并输出一个浮点数。


图片

o 将整数格式化为八进制数。


图片


图片

s 格式化字符串。


图片

x 在需要时使用小写 af 将整数格式化为十六进制数。


图片

X 与...一样 x 但使用大写字母。


图片

% 打印文字 % 符号(即指定“%%”)


图片


我们将演示每个转换说明符对字符串“380”的影响:



[我@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380、380.000000、574、380、17C、17C

[我@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380、380.000000、574、380、17C、17C


由于我们指定了六个转换说明符,我们还必须提供六个参数

printf 处理。 六个结果显示了每个说明符的效果。

可以将几个可选组件添加到转换说明符中以调整其输出。 完整的转换规范可能包括以下内容:

%[标志][宽度][。精确]转换_规范

使用多个可选组件时,必须按上面指定的顺序出现才能正确解释。 以下是对每个的描述:


表 21-5: printf 转换规范组件


组件说明

组件说明

flags 有五种不同的标志:


图片

# – 使用“替代格式”进行输出。 这因数据类型而异。 对于 o(八进制数)转换,输出前缀为

0. 对于 x 和 X(十六进制数)转换,输出分别以 0x 或 0X 为前缀。


图片

0–(零)用零填充输出。 这意味着该字段将填充前导零,如“000380”。


图片

- - (破折号)左对齐输出。 默认情况下, printf 右对齐输出。


图片

' ' - (空格)为正数产生前导空格。


图片

+ –(加号)符号正数。 默认情况下,仅 printf


图片


图片

符号负数。


图片

宽度 指定最小字段宽度的数字。


图片

。精确 对于浮点数,指定小数点后输出的精度位数。 对于字符串转换, 精确 指定要输出的字符数。


图片


以下是一些不同格式的示例:


表 21-6:打印转换规范示例


争论

格式

结果

笔记

380

“%d”

380

简单格式化

整数。

380

“%#X”

0x17c

整数格式为

十六进制数使用

“替代格式”标志。

380

“%05d”

00380

整数格式为

前导零(填充)

和最小字段宽度

五个字符。

380

“%05.5f”

380.00000

数字格式为

浮点数与

填充和五位小数

精确的地方。 自从

指定的最小值

字段宽度 (5) 小于

实际宽度

格式化的数字,

填充没有效果。

380

“%010.5f”

0380.00000

通过增加

最小字段宽度为 10

填充现在可见。

380

“%+d”

+380

+ 标志表示积极

数。

380

“%-d”

380

- 标志左对齐

格式。


abcdefghijk

“%5s”

abcedfghijk

以最小字段宽度格式化的字符串。

abcdefghijk

“%.5s”

ABCDE

通过对字符串应用精度,它会被截断。


同样, 的printf 主要用于格式化表格数据的脚本中,而不是直接在命令行中使用。 但是我们仍然可以展示如何使用它来解决各种格式问题。 首先,让我们输出一些由制表符分隔的字段:



[我@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

字符串1 字符串2 字符串3

[我@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

字符串1 字符串2 字符串3


通过插入 \t (选项卡的转义序列),我们达到了预期的效果。 接下来,一些格式整齐的数字:



[我@linuxbox ~]$ printf“行:%05d %15.3f 结果:%+15d\n”1071 3.14156295 32589

线路:01071 3.142 结果:+32589

[我@linuxbox ~]$ printf“行:%05d %15.3f 结果:%+15d\n”1071 3.14156295 32589

线路:01071 3.142 结果:+32589


这显示了最小字段宽度对字段间距的影响。 或者如何格式化一个小网页:



[我@linuxbox ~]$ 打印输出“ \n\t \n\t\t %s \n

\t \n\t \n\t\t %s \n\t \n \n" "页面标题" "页面内容"

页面标题

页面内容

[我@linuxbox ~]$ 打印输出“ \n\t \n\t\t %s \n

\t \n\t \n\t\t %s \n\t \n \n" "页面标题" "页面内容"

页面标题

页面内容


OnWorks 的顶级操作系统云计算: