十、shell printf命令:(格式化输出语句)_play_chess_ITmanito的博客-程序员宅基地

技术标签: 格式化  # shell脚本  shell  printf  

printf 命令模仿 C 程序库(library)里的 printf() 程序。
标准所定义,因此使用printf的脚本比使用echo移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。
默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。

和 echo 命令一样,printf 命令也可以输出简单的字符串:

eg1:
printf "a b c"
printf "%s \n" "a b c"
结果:
[root@h data]# /bin/sh b.sh 
a b ca b c 
[root@h data]#
eg2:
printf "a b c"
printf "%s \n" "a b c"
printf "%s \t" "d"

结果:
d[root@h data]# vi b.sh
[root@h data]# /bin/sh b.sh 
a b ca b c 
d   [root@h data]#

注:
printf 不像 echo 那样会自动换行,必须显式添加换行符(\n)。

printf 命令的语法:

printf  format-string  [arguments...]

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

printf()在C语言入门教程中包含,功能和用法与 printf 命令类似,请查看:C语言格式输出函数printf()详解

与C语言printf()函数的不同:
printf 命令不用加括号
format-string 可以没有引号(没实现),但最好加上,单引号双引号均可。
参数多于格式控制符(%)时,format-string 可以重用,可以将所有参数都转换。
arguments 使用空格分隔,不用逗号。

eg1:
# format-string为双引号
printf "%d %s\n" 23 "hahaha"
结果:
[root@h data]# /bin/sh c1.sh 
23 hahaha
eg2:
# 单引号与双引号效果一样 
printf '%d %s\n' 23 'hahaha'
结果:
[root@h data]# /bin/sh c.sh 
23 hahaha
eg3-1:
# 没有引号也可以输出(没实现)---一个参数值可以format-string不加任何符号,两个值及以上不加符号未实现
printf  %s 23 'hahaha'
结果:
[root@h data]# /bin/sh c1.sh 
23hahaha[root@h data]# 

eg3-2:
printf %d %s\n 23 hahaha
结果:
[root@h data]# /bin/sh c2.sh 
c2.sh: line 1: printf: %sn: invalid number
c2.sh: line 1: printf: hahaha: invalid 
eg4-1:
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf  %s 23 'hahaha'
结果:
[root@h data]# /bin/sh c1.sh 
23hahaha[root@h data]# 

eg4-2:
printf "%s \n" "abc" "def"
结果:
[root@h data]# /bin/sh a.sh 
abc 
def

eg4-3:
printf %s \n abc def
结果:
[root@h data]# /bin/sh a.sh 
nabcdef[root@h data]# 

eg4-4:
# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
[root@h data]# printf "%s and %d \n"
 and 0 

 eg4-5:
# 如果以 %d 的格式来显示字符串,那么会有警告,提示无效的数字,此时默认置为 0
[root@h data]# printf %d afdvd dfagdfdav
-bash: printf: afdvd: invalid number
-bash: printf: dfagdfdav: invalid number

eg4-6:
[root@h data]# printf %s 1 24 4543 34 23
12445433423[root@h data]# 

注意,根据POSIX标准,浮点格式%e、%E、%f、%g与%G是“不需要被支持”。这是因为awk支持浮点预算,且有它自己的printf语句。这样Shell程序中需要将浮点数值进行格式化的打印时,可使用小型的awk程序实现。然而,内建于bash、ksh93和zsh中的printf命令都支持浮点格式。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/play_chess_ITmanito/article/details/77877187

智能推荐

dep代码涉及到日期的_艳阳天_.的博客-程序员宅基地

var easNames = JavaImporter();easNames.importPackage(Packages.com.kingdee.bos.dao.query);easNames.importPackage(Packages.java.math);with(easNames){ var customerId=""; var customerName="": ...

软件测试-测试报告如何编写_蓝天下的风的博客-程序员宅基地_怎么编写测试报告

测试报告如何编写#测试报告主要包含测试范围、测试环境、遗留的bug有哪些、测试用例覆盖率、bug统计回归测试引言部分1、项目背景主要描述此项目的背景和需要实现的一些功能。2、参考资料参考的一些主要资料测试基本信息1、测试范围主要在测试过程中的一个测试范围,描述清楚即可,必写!2、测试案例设计思路功能测试—等价划分类(有效+无效)、边界值分析、错误推测、场景法等界面测试—满足...

《深入理解Java虚拟机》读书笔记——Java内存区域与内存溢出异常_低调小一的博客-程序员宅基地

前言10月4号就要举办和璐璐的婚礼了,为了督促自己,准备8月份利用一个月晚上的业务时间来学习Java虚拟机的知识。 参考的是周志明写的《深入理解Java虚拟机》。运行时的数据区域初学Java时,估计很多人都跟我一样,将Java的内存模型划分为:栈区堆区字符串常量区并非说这种区分方法是错误的,而是说这种区分方法过于笼统,纯粹是为了方便记忆。真要深入了解Java语言,那我们就应该清楚的知道,J

mybatis第一次连接mysql很慢_mybatis+mysql,第一次数据库连接很慢怎么回事?_苏小铁的博客-程序员宅基地

springboot+mybatis+mysql项目大致上的代码结构是@RestControllerclass ApiClass{Logger logger = LoggerFactory.getLogger("log");@AutowiredApiService apiService;@RequestMapping(value = "/api")public String doApi{logge...

电流/电压转换芯片MAX472解决电流波动过大的直流电流测试问题(转)_肖裕伟的博客-程序员宅基地_直流电压电流检测芯片

电流/电压转换芯片MAX472在永磁直流电动机虚拟测试系统中的应用类别:接口电路作者:北京航空航天大学(100083) 魏振忠 刘向群 来 源:《电子技术应用 》摘 要  阐述了电流/电压转换芯片MAX472的工作原理、在永磁直流电动机虚拟测试系统中的具体应用电路及各项参数的计算。从不同角度分析了系统的测量精度,从而验证了应用该芯片的可行性。关键

【iOS】iOS数据存储,应用沙盒,XML,Preference,NSKeyedArchiver归档,SQLite3_yofer张耀琦的博客-程序员宅基地

版权声明:本文为博主原创,如需转载请注明出处。应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Suppo

随便推点

开发RESTful WebService_weixin_30709929的博客-程序员宅基地

RESTful风格的webservice越来越流行了,sun也推出了RESTful WebService的官方规范:JAX-RS,全称:Java API for RESTful WebService。该规范定义了一系列的注解RESTful简化了web service的设计,它不再需要wsdl,也不再需要soap协议,而是通过最简单的http协议传输数据(包括xml或json)。既简化了设...

Python高手修炼之道——从新手到高手的最短路径_CSDN官方博客的博客-程序员宅基地_python高手修炼之道

对于新手来说,如何选择正确的路线快速成长为优秀的Python程序员,成为一个非常现实而急迫的问题。那么,一个Python程序员的成长路线应该是怎样的呢?在各位程序员苦苦思索时,有这样一本为Python程序员量身打造的书——《Python高手修炼之道》上市了!本书作者许向武是山东远思信息科技有限公司CEO、程序员宅基地专家、个人主页访问量超百万的资深程序员,他从2007年开始接触Python,从2009年开始单一使用Python应对所有的开发工作。回顾这一段历程,他也曾经遇到过无数的困难.

matlab求导subsindex,MATLAB常用函数_乃逸夫的博客-程序员宅基地

15 句柄图形(Handle Graphics) 15.1 图形窗的产生和控制(Figure window creation and control) clf 清除当前图 close 关闭图形 figure 打开或创建图形窗口 gcf 获得当前图的柄 openfig 打开图形 refresh 刷新图形 shg 显示图形窗 15.2 轴的产生和控制(Axis creation and control...

EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清..._9栋108的博客-程序员宅基地

C# mvc+EF 运行视图时出现问题:未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)解决办法:查看所有引用的EntityFramework版...

vsftp搭建_dbkov62862的博客-程序员宅基地

vsftp搭建vsftpd(very secure ftpdaemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。安装[[email protected] ~]# yum install vsftpd查看vsftp配置# 备份配置文件...

FTPClient读取文件流遇到的坑_秋风凉~的博客-程序员宅基地_ftpclient获取文件流

在org.apache.commons.net.ftp.FTPClient中 使用retrieveFileStream(fileName) 对多个文件读取的时候,在读完一个文件之后,必须调用一次completePendingCommand()这个方法。如果不调用的话,之后再读取文件的时候,返回的结果为空。或者进行目录切换的时候changeWorkingDirectory() 也会切换失效。...

推荐文章

热门文章

相关标签