0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux bash中的printf命令详解

CHANBAEK 来源:TIAP 作者:TIAP 2023-04-13 16:22 次阅读

Linux 命令行中最简单的打印方法是使用 echo 命令:

echo "Value of var is $var"

然而,echo 命令不支持格式化输出。 要格式化输出,可以使用 printf 命令,bash 中的 printf 与 c/c++ 中的printf 命令类似:

printf "My brother %s is %d years old.\\n" Prakash 21

其输出如下所示:

图片

第一个参数 %s 接受一个字符串,第二个参数 %d 接受的是一个十进制整数,就跟 c/c++ 中的一样。 接下来我们展示一些 bash printf 命令的例子。

bash 中的 printf 命令

printf 命令的语法如下:

printf format [arguments]

这里,format 是一个字符串,用于确定后续值的显示方式。

在上面的例子中 printf "My brother %s is %d years old.\\n" Prakash 21,前面的语句 "My brother %s is %d years old.\\n" 是格式,后面的 Prakash 和 21 是参数,这些参数用于替换前面格式中的占位符 %s 和 %d。

在最简单的方式中,printf 的使用跟 echo 类似:

printf "Hello World\\n"

注意到最后面的换行符 \\n 了吗? echo 和 printf 命令的区别在于,echo 命令会自动在末尾添加一个换行符,但是 printf 命令需要手动添加。

图片

要特别注意参数的类型和数量

这里需要注意,格式化字符串通常会尝试应用于所有参数。 看下面的例子:

$ printf "Hello, %s! \\n" Abhishek Prakash
Hello, Abhishek! 
Hello, Prakash!

图片

同时,也需要尽量匹配格式化字符串中所期望的数据类型:

图片

通过上面的例子可以看到,如果没有找到匹配的参数,会使用默认值,默认字符串为 null,整数为 0.

printf "Hi %s, your room number is %d. \\n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

上面代码中,Abhishek Prakash 会被用于第一个参数,131 会被用于第二个参数。

当它找到一个字符串(Prakash)而不是整数时,就会报错,但它会继续显示第二个参数为默认值0的输出。

类似地,它将131视为第二组参数中的字符串,由于第二个参数不存在,因此它默认为0。

规范格式字符

有几个格式说明符可用于以所需格式显示输出。 以下是一些最常见的:

字符 用途
%s 字符串
%c 单个字符
%d 整数
%o 八进制整数
%x 十六进制整数
%f 浮点
%b 带反斜杠转义字符的字符串
%% 百分号

一些例子

下面是一些比较简单的例子,通过命令就可以看出它的用法。

$ printf "The octal value of %d is %o\\n" 30 30
The octal value of 30 is 36

让我们看看使用 %b 说明符来正确解释反斜杠转义字符。

$ printf "String with backslash: %s\\n" "Hello\\nWorld!"
String with backslash: Hello\\nWorld!

上面例子中 %s 正常使用,这个没有什么好解释的,但是参数中的 \\n 换行符却没有起作用。 这时候,需要用到 %b:

$ printf "String with backslash: %b\\n" "Hello\\nWorld!"
String with backslash: Hello
World!

当使用 %c 时,它一次只读取一个字符:

$ printf "Character: %c\\n" a
Character: a
$ printf "Character: %c\\n" a b c
Character: a
Character: b
Character: c
$ printf "Character: %c\\n" abc
Character: a

使用修饰符以特定样式显示 printf 输出

有一些字符可以用于根据你的喜好来设置输出的样式。

# 用于显示八进制和十六进制数字

早些时候,我们使用过 %o 将十进制转为八进制,但是输出却不能很清楚的看出来这是一个八进制,所以现在我们使用修饰符 # 来正确的显示八进制和十六进制的数字。

$ printf "%d is %#o in octal and %#x in hexadecimal\\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

正整数的空格修饰符

可以在 % 和 d 之间加一个空格来显示带前导空格的正整数,当有正数和负数时,这样显示会更规范,如下所示:

$ printf "%d \\n%d \\n%d \\n" 10 -10 10
10 
-10 
10 
$ printf "% d \\n%d \\n% d \\n" 10 -10 10
 10 
-10 
 10

宽度修改器

宽度修饰符是一个整数,用于指定参数的最小字段宽度。

默认情况下,它是右对齐的:

$ printf "%10s| %5d\\n" Age 23
       Age|    23

可以使用中划线 - 来让其左对齐:

$ printf "%-10s| %-5d\\n" Age 23
Age       | 23

设置精度

可以使用一个点 . 来指定 %d、%u、%o、%x 显示的最小位数,不足位的左侧以 0 补充。 如下所示:

$ printf "Roll Number: %.5d\\n" 23
Roll Number: 00023

如果对字符串使用精度修饰符,它会指定字符串的最大长度。 如果字符串较长,则会在显示中被截断。

$ printf "Name: %.4s\\n" Abhishek
Name: Abhi

还可以组合宽度和精度修改器:

$ printf "Name: %.4s\\n" Abhishek
Name: Abhi
$ printf "Name: %10.4s\\n" Abhishek
Name:       Abhi

以表格格式显示输出

下面我们看一个稍微复杂一点的例子,在 bash 中使用 printf 命令打印如下表格:

名字 身份证 年龄 成绩
福尔摩斯 0000122 23 一个
詹姆斯·邦德 0000007 27 F
赫拉克勒斯·波洛 0006811 59 G
简·马普尔 1234567 71 C

下面是我编写的脚本,大家根据各自情况可以尝试一下:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\\n"
TableWidth=37


printf "%-15s| %-7s| %.3s| %s\\n" Name ID Age Grades
printf "%.${TableWidth}s\\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

运行,其输出如下:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209358
  • 命令
    +关注

    关注

    5

    文章

    683

    浏览量

    22017
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73625
  • Bash
    +关注

    关注

    0

    文章

    57

    浏览量

    10181
  • Printf
    +关注

    关注

    0

    文章

    83

    浏览量

    13651
收藏 人收藏

    评论

    相关推荐

    详解Linux Bash命令

    Bash 是一种相当强大的编程语言,而且也很容易上手。
    发表于 08-15 09:12 1612次阅读

    bash脚本的test命令详解

    bash 脚本的 test  命令用于检查表达式的有效性,检查命令或表达式为 true 或者 false。此外,它还可以用于检查文件的类型和权限。
    发表于 11-24 15:32 3768次阅读
    <b class='flag-5'>bash</b>脚本<b class='flag-5'>中</b>的test<b class='flag-5'>命令</b><b class='flag-5'>详解</b>

    Linux系统命令及其使用详解

    Linux系统命令及其使用详解
    发表于 08-20 13:38

    Linux Shell系列教程之Shell printf命令详解

    )。  如果printf无法进行格式的转换,便返回一个非零的退出状态。  好了,对于Shell printf命令详解就先进行到这里,printf
    发表于 09-03 13:47

    Linux bash命令

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。以下是几种shell版本,bash是默认的:sh(全称 Bourne
    发表于 07-08 08:25

    Linuxbash的主要介绍

    shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多,这里列出其中几种 - Bourne SHell(sh) - Bourne
    发表于 07-11 06:53

    Linux的chattr与lsattr命令详解

    【转】Linux的chattr与lsattr命令详解
    发表于 04-20 11:38

    Linux启动过程详解

    1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux
    发表于 11-02 07:01

    Linux关机命令详解

    Linux关机命令详解linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都 可以达到重启
    发表于 01-18 12:52 3630次阅读

    Linux系统命令及其使用详解 _120页

    电子发烧友网站提供《Linux系统命令及其使用详解 _120页.doc》资料免费下载
    发表于 04-18 13:23 3次下载

    Linux命令详解 [兼容模式]pdf免费下载

    linux命令详解pdf,希望对大家有帮助!
    发表于 12-15 15:54 10次下载

    Linux操作系统基础命令:如何运用Bash history

    相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history 命令并非只有这个功能,history 还有很多有用的功能。尤其是 Bash 版本的 histor
    的头像 发表于 09-02 11:05 2019次阅读

    Linux系统EXP命令详解质量汇总

    Linux系统EXP命令详解质量汇总
    发表于 05-14 09:35 1次下载

    Linux虚拟机之tcpdump命令操作详解

    Linux虚拟机之tcpdump命令操作详解
    发表于 08-12 09:50 23次下载

    BASH shell脚本篇—条件命令

    这篇文章介绍下BASH shell的条件相关的命令,包括:if, case, while, until, for, break, continue。
    的头像 发表于 10-11 15:21 617次阅读
    <b class='flag-5'>BASH</b> shell脚本篇—条件<b class='flag-5'>命令</b>