Linux学习笔记-printf命令
整体来说printf类似为C语言的printf()函数printf 使用引用文本或空格分隔的参数外面可以在 printf 中使用格式化字符串还可以制定字符串的宽度、左右对齐方式等。默认的 printf 不会像 echo 自动添加换行符我们需要手动添加 \n。printf的作用1、格式控制可以指定字段宽度、精度和对齐方式。例如%10s可以让字符串强制显示10个字符不足10个在前面补空格。%10d让整数强制显示10个字符不足10个同样是补空格。2、类型安全不同类型的数据整数、浮点数、字符串等有对应的格式说明符。3、可移植性行为在不同系统和Shell中更加一致。4、复杂输出适合生成表格、报表等结构化输出。7.1 基本语法printf format-string [arguments...]参数说明format-string表示格式说明符或者普通字符串。arguments... 与格式说明符对应的参数例如变量或者字符串值。格式说明符由 % 字符开始后跟一个或多个字符用于指定输出的格式。%后可以跟一个整数n表示显示字节数为n的字符串/字符/数据原串超过n就原样显示否则就前面补空格。这里需要注意中文汉字和标点都占3个字节。7.1.1 常用的格式说明符%s处理字符串%d处理10进制整数。%f处理浮点数默认保留6位小数不足6位就补0。如果需要指定保留的小数位数要在%或者%x后面跟一个.n保留n位小数%c处理字符。%x处理十六进制数会将数据自动转换成十六进制数:%o处理八进制数。%b处理二进制数。%e用科学计数法表示小数7.1.2 工作流程1、解析格式字符串遇到普通字符直接输出。2、遇到格式说明符以%开头时读取下一个参数。按照说明符指定的格式处理该参数。将结果插入到输出中。处理完所有格式说明符后输出最终结果。7.2 实践示例7.2.1 基本使用如下代码测试一下简单的字符串输出和带变量的输出结果7.2.2 格式化控制如下代码用不同方式将两段不同长度字符串对齐说明printf |%*s|\n expr ${#hello} 10 ${hello}这段代码中%和s这种格式说明符之间可以加*号表示输出的字符串长度是变量。expr ${#hello} 10这个表达式是结果就是*的具体值。整体代码的作用就是让这两个字符串都显示出10的宽度。之所以这里不直接用%10s是因为在计算字符串宽度时一个汉字字符是3字节但是最终显示的时候一个字符的宽度只会显示2列导致出现错位比如“早安”两个字在这种情况下就会显示2*2(10-2*3)8列。而“你也是”三个字会显示3*2(10-3*3)7列。而${#hello} 10这个表达式怎么得来的由于篇幅限制就不展开了。结果如下如果是纯英文字符那就直接使用%10s即可。7.2.3 多参数显示这个直接在格式字符串那写入多个即可空格分割、参数处字符串按照”双引号空格分割其他空格分割如果没有注意双引号做分割就会这样7.3 进阶用法菜鸟教程上有很多大部分我都自己能实现并且功能重复我就不一一列举了。这里我只做一个格式化输出这里注意lunux系统很坑汉字如果字数不一致容易对不齐这里我手动微调了一些数值。结果7.4 printf的转义字符这几个跟echo的转义符意义相同\b退格、\n换行、\r回车、\t水平制表、\v垂直制表、\\反斜杠本身就不详细展开了。\a警告字符通常为ASCII的BEL字符。\c抑制不显示输出结果中任何结尾的换行字符只在%b格式指示符控制下的参数字符串中有效而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略。\f换页formfeed\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效\0ddd表示1到3位的八进制值字符。