shell脚本:shell的基本元素-4 华丽的printf输出

    由于echo有版本上的差异,所以导致UNIX版本间可移植性的问题,在POSIX标准化中并没有一个统一的标准,所以说各厂商必须提供说明文件,描述其echo版本的做法(现行版本的标准中,说明echo在本质上等同于System V版本,后者会处理其参数中的转义序列,但不处理-n),事实上,只要是使用最简单的形式,其echo的可移植性不会有问题。Ninth Edition Reserch UNIX系统上所采用的printf命令,比echo更灵活,却更复杂。
    printf命令模仿C程序库 (library)里的printf()库程序(library routine).它几乎复制了该函数所有的功能,如果之前曾经使用C、C++、awk、Perl、Python或Tcl写过程序,对它的基本概念应该不陌生。当然,它在shell层级的版本上,会有些差异。
    如同echo命令,printf命令可以输出简单的字符串:

    printf "hello world\n"

    我们发现,最大的不同在于:printf不像echo那样会自动提供一个换行符号。我们必须显式的将换行符号指定成\n。printf命令的完整语法分为两部分:

    printf format-string [arguments...]

    第一部分是一个字符串,用来描述输出的排列方式,最好为此字符串加上引号。此字符串包含了按字面显示的字符(characters to be printed literally)以及格式声明(format specifications).后者是特殊的占位符(placeholders),用来描述如何显示相应的参数(argument).
    第二部分是与格式声明相对应的参数列表(argument list),例如一系列的字符串或变量值。(如果参数的个数比格式声明还多,则printf会循环且依次地使用格式字符串里的格式声明,直到处理完参数。格式声明分为两部分:百分比符号%和指示符(specifier)。最常用的格式指示符(format specifier)有两个,%s用于字符串,而%d用于十进制整数。
    格式字符串中,一般字符会按字面显示。转义序列则像echo那样。解释后再输出成相应的字符。格式声明以%符号开头,并以定义的字母集中的一个来结束,用来控制相应参数的输出。例如,%s用于字符串的输出:
$printf "this is a %s,%s\n" printf test
this is a printf,test

你可能感兴趣的:(linux)