linux printf 命令

printf 命令

用途

写格式化输出。

语法

printf FormatArgument  ... ]

描述

printf 命令转换、格式化并写 Argument 参数到标准输出。Argument 参数是由 Format 参数控制格式化的。格式化输出行不能超出 LINE_MAX 字节长度。

下列环境变量影响 printf 命令的执行:

LANG LC_ALL 和相应的环境变量(以 LC_ 开头)没有指定语言环境时,确定语言环境编目使用的语言环境。
LC_ALL 确定用于覆盖由 LANG 或其它任何 LC_ 环境变量设置的任何语言环境编目值的语言环境。
LC_CTYPE 确定把文本字节数据顺序解释为字符的语言环境;例如,单一字节对应多字节字符的参数。
LC_MESSAGES 确定写消息使用的语言。
LC_NUMERIC 确定数字格式编排的语言环境。此环境变量影响使用 e、E、f、gG 转换字符编写的数字的格式。

Format 参数是包含三种对象类型的一个字符串:

  • 无格式字符复制到输出流。
  • 转换规范,每个规范导致在值参数列表中检索 0 个或更多个项。
  • 以下转义序列。在复制到输出流时,这些序列导致它们的相关操作在有此功能的设备上显示:
    // 反斜杠
    /a 警告
    /b 退格
    /f 换页
    /n 换行
    /r 回车
    /t 跳格
    /v 垂直跳格
    / ddd ddd 是 1、2 或 3 位八进制数字。这些转义序列作为由八进制数指定的具有数字值的字节显示。

Argument 参数是一个或多个字符串的列表,它在 Format 参数的控制下被写到标准输出。

Format 参数在必要的情况下会经常重新使用以满足 Argument 参数。将好像提供了空字符串 Argument 一样评估任何额外的 c 或者 s 转换规范;其它额外转换规范将好像提供了 0 Argument 一样评估。此处 Format 参数不包含转换规范仅出现 Argument 参数,结果是不确定的。

每个 Format 参数中的转换规范都具有如下顺序的语法:

  1. % (百分号)。
  2. 零或更多的选项,修改转换规范的含义。选项字符和它们的含义是:
    - 转换结果在字段中左对齐。
    + 符号转换结果常以符号(+ 或者 -)开始。
    空格 如果符号转换的第一个字符不是符号,结果的前缀将是空格。如果空格和 + 选项字符都显示,则忽略空格选项字符。
    # 此选项指定值转换到备用格式。对于 c、d、i、u 和 s 转换,选项没有作用。对于 o 转换,它增加精度来强制结果的第一数字是 a、0(零)。对于 x 和 X 转换,非零结果分别具有 0x 或 0X 前缀。对于 e、E、 f、g 和 G 转换,结果通常包含基数字符,即使基数字符后没有数字。对于 gG 转换,结尾零不象通常一样除去。
    0 对于 d、i、o、u、x、e、E、f、g 和 G 转换,前导零(跟在符号或底数的后面)用于填充字段宽度,将不用空格填充。如果显示 0 (零)和 - (减号)选项,0 (零)选项被忽略。对于 dioux 和 X 转换,如果指定精度,0 (零)选项将被忽略。
    注:
    其它转换,没有定义其行为。
  3. 可 选的指定最小值字段宽度的十进制数字字符串。如果转换值字符少于字段宽度,该字段将从左到右按指定的字段宽度填充。如果指定了左边调整选项,字段将在右边 填充。如果转换结果宽于字段宽度,将扩展该字段以包含转换后的结果。不会发生截断。然而,小的精度可能导致在右边发生截断。
  4. 可选的精度。精度是一个 .(点)后跟十进制数字字符串。如果没有给出精度,按 0(零)对待。精度指定:
    • d、o 、i 、u 、x 或 X 转换的最少数字显示位数。
    • e 和 f 转换的基数字符后的最少数字显示位数。
    • g 转换的最大有效数字位数。
    • s 转换中字符串的最大打印字节数目。
  5. 指示要应用的转换类型的一个字符,例如:
    % 不进行转换。打印一个 %(百分号)。
    d , i 接受整数值并将它转换为有符号的十进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示,将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度,导致用前导零填充字段宽度值。
    o 接受整数值并将它转换为有符号的八进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示,将使用前导零扩展。缺省精 度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度,导致用前导零填充字段宽度值。不用八进制值表示字段宽度。
    u 接受整数值并将它转换为无符号的十进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示,将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度,导致用前导零填充字段宽度值。
    x , X 接受整数值并将它转换为十六进制符号表示法。字母 abcdef 用于 x 转换,字母 ABCDEF 用于 X 转换。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示,将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度,导致用前导零填充字段宽度值。
    f 接受浮点或者双精度值并将它转换为十进制符号表示法,格式为 [- ] ddd . ddd 。基数字符(在这里显示为十进制点)后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度,则输出六个数字。如果精度是 0 (零),将不显示基数字符。
    e , E 接受浮点或者双精度值并将它转换为指数表示的形式 [- ] d . dd e {+ |- }dd 。在基数字符前有一个数字(在这里显示为十进制点),基数字符后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度,则输出六个数字。如果精度是 0(零),将不显示基数字符。E 转换字符在指数前生成带 E 而不是带 e 的数字。指数通常至少包含两个数字。然而,如果要打印的指数值大于两个数字,必要时需要打印附加指数数字。
    gG 接受浮点和双精度值并转换为 f 或 e 转换字符的样式(或在 G 转换的情况下是 E),用精度指定有效数字的个数。尾零将从结果中除去。基数字符只有在其后是数字时显示。使用的样式取决于转换的值。样式 g 仅在转换的指数结果小于 -4,或大于或等于精度时使用。
    c 接受值将其作为字符串并打印字符串中的第一个字符。
    s 接受值将其作为字符串并打印字符串中的字符直到字符串结束或者达到精度指示的字符个数。如果没有指定精度,打印全部字符直到出现第一个空字符。
    b 接受值将其作为字符串,可能包含反斜杠转义序列。打印来自转换字符串的字节直到字符串结束或者达到精度规范指示的字节数。如果没有指定精度,打印全部字节直到出现第一个空字符。

支持下列反斜杠转义序列:

  • 先前列出的反斜杠转义序列在 Format 参数描述下。这些转义序列将被转换到它们表示的单个字符。
  • /c(反斜杠 c)序列,它不显示并使 printf 命令忽略 Format 参数中的字符串参数包含的剩余的所有字符串,所有剩余的字符串参数和所有附加字符。

退出状态

该命令返回以下出口值:

0 成功完成。
>0 发生错误。

示例

  1. 输入下列命令:
    printf "%5d%4d/n" 1 21 321 4321 54321
    

    产生下列输出:

        1  21
    3214321
    54321 0

    三次使用 Format 参数打印所有给定字符串。0(零)由 printf 命令提供以满足最后的 %4d 转换规格。

  2. 输入下列命令
    printf "%c %c/n" 78 79
    

    产生下列输出:

    7 7
    

文件

/usr/bin/printf 包含 printf 命令

你可能感兴趣的:(linux)