上QQ阅读APP看书,第一时间看更新
2.3 在输出中加入更多格式控制
2.3.1 问题
你希望能够更多地控制输出的格式和位置。
2.3.2 解决方案
使用内建命令 printf
。例如:
$ printf '%s = %d\n' Lines $LINES
Lines = 24
$
或者:
$ printf '%-10.10s = %4.2f\n' 'Gigahertz' 1.92735
Gigahertz = 1.93
$
2.3.3 讨论
内建命令 printf
的行为和 C 语言中的同名库函数相似,其中第一个参数是格式控制字符串,之后的参数都根据格式规范(%
)进行格式化。
%
和格式类型(本例为 s
或 f
)之间的数字提供了额外的格式化细节。对于浮点类型(f
),第一个数字(指示符 4.2
中的 4
)是整个字段的宽度。第二个数字(2
)是应该在小数点右侧打印出的数位量。注意,结果会按照四舍五入处理。
对于字符串,第一个数字是字段的最大宽度,第二个数字是要输出的字符数量。根据需要,字符串会被截断(长于 max
)或用空白填充(不足 min
)。如果指示符 max
和 min
相同,那么就可以确保字符串按照该长度输出。指示符左侧的负号表示字符串向左对齐(在字段宽度内)。如果不使用负号,则字符串向右对齐,因此:
$ printf '%10.10s = %4.2f\n' 'Gigahertz' 1.92735
Gigahertz = 1.93
$
可以引用字符串参数,也可以不引用。如果需要保留字符串中嵌入的空白字符(本例的字符串中只有一个单词,不存在空格),或者需要转义字符串中的某些特殊字符(本例也未出现这些特殊字符),可以加上引号 1。最好养成将传给 printf
的字符串都放进引号中的习惯,这样一来,需要用到引号时就不会遗漏了。
1如果想要转义特殊字符,则需要使用双引号。——译者注
2.3.4 参考
help printf
- Cameron Newham 所著的 Learning the bash Shell, 3rd Edition 的第 171 页,或者任何一本 C 语言参考书中的
printf
函数部分 - 15.6 节
- 19.11 节
- A.12 节