上QQ阅读APP看书,第一时间看更新
2.4 消除输出中的换行符
2.4.1 问题
你希望输出中不包含 echo
默认生成的换行符。
2.4.2 解决方案
使用 printf
,做法很简单,去掉格式化字符串末尾的 \n
即可。
$ printf "%s %s" next prompt
next prompt$
如果是 echo
,则使用 -n
选项:
$ echo -n prompt
prompt$
2.4.3 讨论
因为 printf
的格式字符串(第一个参数)末尾并没有换行符,所以命令行提示符($
)出现在了 printf
的输出之后。该特性在 shell 脚本中用处更大,你可能希望在形成一整行前由多条语句逐部分输出,或者在读取输入前显示用户提示。
换作 echo
命令(参见 15.6 节),消除换行符的方法有两种。首先,-n
选项能够抑制输出行尾的换行符。另外,echo
命令还可以处理多种具有特殊含义的转义序列(如表示换行符的 \n
),这些转移序列与 C 语言字符串中的类似。要想使用它们,调用 echo
命令时必须加上 -e
选项。其中一种转义序列是 \C
,它并不会输出什么字符,而是禁止在行尾输出换行符。因此,下面是第三种解决方案:
$ echo -e 'hi\c'
hi$
因为 printf
所提供的格式化功能既强大又灵活,而且该命令还是内建的,调用开销非常小(不像在其他 shell 或老版 bash 中,printf
是一个独立的可执行文件),所以本书中的很多示例都采用了 printf
。
2.4.4 参考
help echo
help printf
- 第 3 章,尤其是 3.5 节
- 2.3 节
- 15.6 节
- 19.11 节
- A.11 节
- A.12 节