bash shell脚本编程经典实例(第2版)
上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 节