如同echo命令,printf命令可以输出简单的字符串:
[many@avention my_sh]$ printf "Hello, world\n"
Hello, world
printf没有像echo提供一个换行符号。必须显式的将换行符号指定成\n。
printf命令的完整语法分为两部分:
printf format-string [ arguments ... ]
第一部分是一个字符串,用来描述的排列方式,最好为此字符串加上引号。此字符串包含了按字面现实的字符(characters to be printed literally)以及各式声明(formatspecifications),后者是特殊的占位符(placeholders),用来描述如何显示相应的参数(argument)。格式声明分成两部分:百分比符号(%)和指示符(specifier)。最常用的格式指示符(format specifier)有两个,%s用于字符串,而%d用于十进制整数。
第二部分是与格式声明相对应的参数列表(argument list),例如一系列的字符串或变量值。(如果参数的个数比格式声明还多,则printf会循环且依次地使用格式字符串里的格式声明,直到处理完参数)。
格式字符串中,一般字符会按字面显示。转移序列则像echo那样,解释后再输出成相应的字符。格式声明以%符号开头,并以定义的字母集中的一个来结束,用来控制相应参数的输出。
[many@avention my_sh]$ printf "The first program always prints '%s, %d'\n" Hello 100
The first program always prints 'Hello, 100'
格式化输出 printf "%-10s %-8s %-4.2f \n" 杨过 男 48.5643
%s %c %d %f 都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数
[many@avention my_sh]$ printf "%-10s %-8s %-4.2f \n" 杨过 男 48.5643
杨过 男 48.56
[many@avention my_sh]$ printf "%-s %-s %-4.2f \n" 杨过 男 48.5643
杨过 男 48.56