zoukankan      html  css  js  c++  java
  • Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令。

    Shell printf命令

    一、Shell printf命令语法

    printf  format-string  [arguments...]

    format-string为描述格式规格的字符串,用来描述输出的排列方式,最好为此字符串加上引号。此字符串包含按字面显示的字符以及格式声明,格式声明时特殊的占位符,用来描述如何显示相应的参数。

    arguments是与格式声明相对应的参数列表,例如一系列的字符串或变量值。

    格式声明由两部分组成:百分比符号(%)和指示符。

    最常用的格式指示符有两个,%s用于字符串,而%d用于十进制整数。

    格式字符串中,一般字符会按字面显示。转义序列则像echo那样,解释后再输出成相应的字符。格式声明以%符号开头,并以定义的字母集中的一个来结束,用来控制相应参数的输出。

    二、Shell printf命令转义序列

    Shell printf命令的转义序列如下表所示

    序列  
    a 警告字符,通常为ASCII的BEL字符
     后退
    c 不显示输出结果中任何结尾的换行字符,而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略。
    f 换页
    换行
    回车
    水平制表符
    v 垂直制表符
    \ 反斜杠字符

    三、Shell printf命令格式指示符

    Shell printf命令的格式指示符如下表所示

    符号 说明
    %c ASCII字符.显示相对应参数的第一个字符
    %d,%i 十进制整数
    %E 浮点格式([-d].precisionE [+-dd])
    %e 浮点格式([-d].precisione [+-dd])
    %g %e或%f转换,看哪一个较短,则删除结尾的零
    %G %E或%f转换,看哪一个较短,则删除结尾的零
    %s 字符串
    %u 不带正负号的十进制值
    %x 不带正负号的十六进制.使用a至f表示10至15
    %% 字面意义的%
    %X 不带正负号的十六进制.使用A至F表示10至15

    四、Shell printf命令精度格式指示符

    Shell printf命令中精度格式指示符入下表所示

    符号 含义
    %d,%i,%o,%u,%x,%X 要打印的最小位数.当值的位数少于此数字时,会在前面补零.默认精度为1
    %e,%E 要打印的最小位数.当值的位数少于此数字时,会在小数点后面补零,默认为精度为6.精度为0则表示不显示小数点小数点右边的位数
    %f 小数点右边的位数
    %g,%G 有效位数的最大数目
    %s

    要打印字符的最大数目

    使用举例:

    printf "%.5d
    " 15
    输出:00015
    
    printf "%.10s
    " "a very long string"
    输出:a very lon
    
    printf "%.2f
    " 123.4567
    输出:123.46

    五、Shell printf命令一些标识符

    Shell printf命令的一些常用标识符如下表所示

    字符 说明
    将字段里已格式化的值向左对齐
    空格 在正值前置一个空格,在负值前置一个负号
    + 总是在数值之前放置一个正号或负号,即便是正值也是
    # 下列形式选择其一:%o有一个前置的o;
    %x与%X分别前置的0x与0X;
    %e,%E与%f总是在结果中有一个小数点;
    %g与%G为没有结尾的零。
    0 以零填补输出,而非空白.这仅发生在字段宽度大于转换后的情况

    使用举例:

    $printf "%-20s%-15s%10.2f
    " "Shan" "zhang" 35       
    输出:Shan                zhang               35.00
    %-20s表示一个左对齐、宽度为20个字符字符串格式,不足20个字符,右侧补充相应数量的空格符。
    %-15s表示一个左对齐、宽度为15个字符字符串格式。
    %10.2f表示右对齐、10个字符长度的浮点数,其中一个是小数点,小数点后面保留两位。
    
    $printf "|%10s|
    " hello
    输出:|     hello|
    %10s表示右对齐,宽度为10的字符串,如不足是个字符串,左侧补充相应数量的空格数.
    
    $printf "|%-10s|
    " hello
    输出:|hello     |
    和案例二比较一下
    
    $printf "%x %#x
    " 15 15
    输出:f 0xf
    如果#标志和%x,%X搭配使用,在输出十六进制数字时,前面回家0x或者0X前缀.
    使用标志符的作用主要是为了动态的指定宽度和精度.

    六、Shell printf命令的一些综合示例

    下面给大家总结了一些比较综合的例子,希望能够帮助大家学习Shell printf命令。

    字符串向左向右对齐:
    $printf "|%-10s| |%10s|
    " hello world
    输出|hello     | |     world|
    
    空白标志:
    $printf "|% d| |% d|
    " 15 -15                 
    输出:| 15| |-15|
    
    +标志:
    $printf "|%+d| |%+d|
    " 15 -15  
    输出:|+15| |-15|
    
    #标志:
    $printf "%x || %#X
    " 15 15
    输出:f || 0XF
    
    0标志:
    $printf "%05d
    " 15
    输出:00015

    对于转换指示符%b、%c与%s而言,相对应的参数都应为字符串。否则,他们会被解释为C语言的数字常数(开头的0位八进制,以及开头的0x与0X为十六进制)。

    更进一步说,如果参数的第一个字符为单引号或双引号,则对应的数值是字符串的第二个字符的ASCII值,比如:

    命令:printf “%s is %d ” a “‘a”

    输出:a is 97 

    当参数多于格式指示符时,格式指示符会根据需要再利用。

    这种做法在参数列表长度未知时非常方便。

    例如来自通配符表达式,如果留在格式字符串里剩下的指示符比参数多时,如果是数值转换,则遗漏的值会被看做是零。

    但如果是字符串转换,则被视为空字符串(虽然可以这么用,但比较好的方式应该是一一对应关系,即提供的参数数目和格式字符串数目相同)。

    如果printf无法进行格式的转换,便返回一个非零的退出状态。

    好了,对于Shell printf命令的详解就先进行到这里,printf是一个非常强大的命令,希望大家平时能够多多练习,争取熟练掌握。

    更多Shell教程请看:Linux Shell系列教程


    本文由Linux技术达人【daxue】发表在:Linux大学
    本文固定链接:Linux Shell系列教程之(八)Shell printf命令详解
    转载请保留链接及出处!
  • 相关阅读:
    第 4 章 MySQL 安全管理
    第 3 章 MySQL 存储引擎简介
    第 2 章 MySQL 架构组成
    道教的【五行】学说
    【matlab】MTATLAB解线性方程组
    RPolar项目进度记录
    numpy和TensorFlow的函数
    卷积
    腾讯QQ空间超分辨率技术TSR
    混元桩
  • 原文地址:https://www.cnblogs.com/waitig/p/5569550.html
Copyright © 2011-2022 走看看