zoukankan      html  css  js  c++  java
  • shell printf命令:格式化输出语句

    printf命令:格式化输出命令, 是echo命令的增强版。它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同。
    注意:使用printf的脚本比使用echo移植性好。

    如同echo命令,printf命令可以输出简单的字符串:
        [root@master ~]#printf "Hello, Shell "
        Hello, Shell
        [root@master ~]#
    你应该可以马上发现,最大的不同在于:printf不像echo那样会自动提供一个换行符号。你必须显式地将换行符号指定成 。

    printf命令的完整语法有两个部分:

    printf的语法格式:printf format-string [arguments...]
    第一部分为描述格式规格的字符串,用来描述输出的排列方式,最好为此字符串加上引号。

    此字符串包含按字面显示的字符以及格式声明,格式声明时特殊的占位符,用来描述如何显示相应的参数。

    第二部分是与格式声明相对应的参数列表,例如一系列的字符串或变量值。格式声明由两部分组成:
    百分比符号(%)和指示符。最常用的格式指示符有两个,%s用于字符串,而%d用于十进制整数。

    格式字符串中,一般字符会按字面显示。转义序列则像echo那样,解释后再输出成相应的字符。格式声明以%符号开头,并以定义的字母集中的一个来结束,用来控制相应参数的输出。例如%s用于字符串的输出:
        [root@master ~]# printf "The first program always prints'%s,%d '" Hello Shell
    输出结果为:
        -bash: printf: Shell: invalid number
        The first program always prints 'Hello,0
        '[root@master ~]#

    当尝试以%d的格式来显示字符串Shell时,会发现有警告,提示Shell为无效的数字,此时会打印出默认值0;从这个试验中可以看出来:%s, %s两侧的单引号''并不是必须的。

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

    默认情况下,转义序列只在格式字符串中会被特别对待,也就是说,如果转义序列出现在参数列表的字符串中,将不会被解释:
        [root@master ~]#printf "a string, no processing:<%s> " "A B"
    当你使用%b格式指示符时,printf会解释参数字符串里的转义序列:
        [root@master ~]#printf "a string, no processing:<%b> " "A B"

    无论时在格式字符串内还是在使用%b所打印的参数字符串里,大部分的转义序列都是被相同对待。无论如何,c与ddd只有搭配%b使用才有效,而ddd只有在格式字符串里才会被解释。

    printf格式指示符

    1.%b 相对应的参数被视为含有要被处理的转义序列之字符串。
    2.%c ASCII字符。显示相对应参数的第一个字符
    3.%d, %i 十进制整数
    4.%e 浮点格式
    5.%E 浮点格式
    6.%f 浮点格式
    7.%g %e或%f转换,看哪一个较短,则删除结尾的零
    8.%G %E或%f转换,看哪一个较短,则删除结尾的零
    9.%o 不带正负号的八进制值
    10.%s 字符串
    11.%u 不带正负号的十进制值
    12.%x 不带正负号的十六进制值,使用a至f表示10至15
    13.%X  不带正负号的十六进制值,使用A至F表示10至15
    14.%% 字面意义的%

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


    数值精度的定义精度的意义:
    1.%d,%i,%o,%u,%x,%X 要打印的最小位数。当值的位数小于此数字时,会在前面补零。默认精度(precision)为1
    2.%e,%E 要打印的最小位数。当值的位数小于此数字时,会在小数点后面补零,默认精度为6.精度为0时则表示不显示小数点
    3.%f  小数点右边的位数
    4.%g,%G 有效位数(significant digit)的最大数目
    5.%s  要打印字符的最大数目

    <br />本文来自【C语言中文网】:<a href="http://see.xidian.edu.cn/cpp/html/1499.html" target="_blank">http://see.xidian.edu.cn/cpp/html/1499.html</a>

  • 相关阅读:
    c++ ShellExecuteEx调用java打包的exe程序
    麻省理工学院公开课-第四讲:快速排序 及 随机化 算法
    Win10的IIS与以前版本的一个区别
    干就行了!!!写程序就像珊瑚,分支太多,哪有那么多复用!
    NPoco的使用方法
    为什么前端要写标准代码?
    对于委托、事件、观察者模式最一目了然的代码段
    delphi处理消息的几种方式
    哎呀妈呀,吓死我了,幸好服务器没崩溃。
    Delphi的Hint介绍以及用其重写气泡提示以达到好看的效果
  • 原文地址:https://www.cnblogs.com/zhaofei/p/3396594.html
Copyright © 2011-2022 走看看