一、概述

  printf 命令模仿 C 程序库(library)里的 printf() 程序。

  printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

  printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

1.1、printf 命令的语法:

  1. printf format-string [arguments...]

参数说明:

  • format-string: 为格式控制字符串
  • arguments: 为参数列表。

1.2、实例

如下:

  1. $ echo "Hello, Shell"
  2. Hello, Shell
  3. $ printf "Hello, Shell\n"
  4. Hello, Shell
  5. $

接下来,我来用一个脚本来体现printf的强大功能:

  1. #!/bin/bash
  2.  
  3. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
  4. printf "%-10s %-8s %-4.2f\n" 郭靖 66.1234
  5. printf "%-10s %-8s %-4.2f\n" 杨过 48.6543
  6. printf "%-10s %-8s %-4.2f\n" 郭芙 47.9876

执行脚本,输出结果如下所示:

  1. 姓名 性别 体重kg
  2. 郭靖 66.12
  3. 杨过 48.65
  4. 郭芙 47.99

%s %c %d %f都是格式替代符

%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中.2指保留2位小数。

1.3、更多实例:

  1. #!/bin/bash
  2.  
  3. # format-string为双引号
  4. printf "%d %s\n" "abc"
  5.  
  6. # 单引号与双引号效果一样
  7. printf '%d %s\n' "abc"
  8.  
  9. # 没有引号也可以输出
  10. printf %s abcdef
  11.  
  12. # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
  13. printf %s abc def
  14.  
  15. printf "%s\n" abc def
  16.  
  17. printf "%s %s %s\n" a b c d e f g h i j
  18.  
  19. # 如果没有 arguments,那么 %s 用NULL代替,%d 用 代替
  20. printf "%s and %d \n"

执行脚本,输出结果如下所示:

  1. abc
  2. abc
  3. abcdefabcdefabc
  4. def
  5. a b c
  6. d e f
  7. g h i
  8. j
  9. and

二、printf的转义序列

序列 说明
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

实例

  1. $ printf "a string, no processing:<%s>\n" "A\nB"
  2. a string, no processing:<A\nB>
  3.  
  4. $ printf "a string, no processing:<%b>\n" "A\nB"
  5. a string, no processing:<A
  6. B>
  7.  
  8. $ printf "www.runoob.com \a"
  9. www.runoob.com $ #不换行

三、格式化

%d %s %c %f 格式替代符详解:

d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!

s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!

c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!

f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!

如:其中最后一个参数是 "def",%c 自动截取字符串的第一个字符作为结果输出。

  1. $ printf "%d %s %c\n" "abc" "def"
  2. abc d

006-Shell printf 命令的更多相关文章

  1. Shell printf 命令

    Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序. 标准所定义,因此使用printf的脚本比使用echo移植性好. printf 使用引 ...

  2. 七、Shell printf 命令

    Shell printf 命令 上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf. printf 命令模仿 C 程序库(library) ...

  3. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  4. 【Shell脚本学习15】shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  5. shell printf命令:怎样格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  6. shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  7. 吴裕雄--天生自然ShellX学习笔记:Shell printf 命令

    printf 命令模仿 C 程序库(library)里的 printf() 程序. printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好. printf ...

  8. Shell printf命令

    Shell 的另一个输出命令 printf.默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n. #!/bin/bash printf "%-10s %-8s %- ...

  9. printf命令详解

    基础命令学习目录首页 本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中 ...

  10. Shell 变量,Shell echo命令

    一.Shell 变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟 ...

随机推荐

  1. alert的美化,并且随滚动条滚动

    onclick="sAlert('${vo.courseName}');" <script type="text/javascript" language ...

  2. php json包 Services_JSON-1.0.2 1 ---one

  3. php if语句判定my查询是否为空

    <?php header("Content-type: text/html; charset=utf-8"); $username=$_GET['username']; $p ...

  4. 关于Unity中的transform组件(三)

    game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下 四元数:(1)Quaternion rot (2)this.cube.rotation 欧拉角:V ...

  5. git 停止在12% writing objects 怎么回事?

    git 停止在12% writing objects 怎么回事? 输入以下代码试一下: git config --global http.postBuffer 524288000  

  6. serv-u ftp服务器搭建

    以前在学校的时候,学校的整个宿舍楼都是在一个局域网中,经常有人用个人电脑搭个网站或者FTP啊什么的,主要是进行一些影视资源的传播活动.不乏有些资源充沛的有志青年利用业余时间翻译某岛国影视资源,利用局域 ...

  7. 小结:bfs

    概要: 我们在初始状态要到达终止状态可以沿着同深度的向下搜索,这样范围覆盖更广,在解的深度较小的时候十分适用. 技巧及注意: 所有状态在转移后如果要打标记一定要在进队列前打!不要在出队列才打!否则就是 ...

  8. v8随心记

    因为node原因,研究v8已经有段时间了,但是一直也没有抽空写点什么,现在想想有好多当时清晰的东西又模糊了.哎,伤心的很啊.但是一时又想不起什么章法,所以只能随手胡乱写了. 下载.编译: https: ...

  9. (转)The windows boot configuration data file dose not contain a valid OS entry

    开价蓝屏,显示: Windows failed  to start. A recent hardware or software change might be the case.to fix the ...

  10. .Net CCNet C#6.0 自动化编译问题解决

    一.问题描述 由于C#6.0一些新的语法特性,导致先前部署的CCNet持续集成平台出现问题,无论是手动还是命令行均不能编译.   二.解决方案 1.下载BuildTools_Full.exe,地址:h ...