BELL字符'\a'的机制?

BELL字符'\a'的机制?

我正在阅读一本有关 shell 编程的书,并了解到以下命令是等效的,这些命令在我的 Mac 上发出蜂鸣声,但在 Ubuntu 上不发出任何声音:

$ echo $'\a'

$ echo -e "\a"

$

但是在这两种情况下,终端都会提示空行。我的问题是:

  1. 这里是什么$'\a'?参数扩展、命令替换还是其他什么?
  2. 为什么echo打印空行就好像参数未定义一样,例如,在这种情况下

$ echo $NONSENSE提示空行?谢谢!

答案1

Ubuntu 上不要发出任何声音:

或许是因为你的特殊终端仿真器配置为避免发出声音,或者因为内核模块已卸载等...您可以使用另一个应该发出蜂鸣声的pcspkr终端模拟器(例如旧的)。xterm

这里是什么$'\a'

阅读shell 扩展章节Bash 手册。它被称为ANSI-C 引用(正如评论者南帕克)。

为什么 echo 打印空行

命令echo(阅读更多回声(1)...)通常是bash shell 内置因此(没有任何-n)它会打印其扩展参数(此处为响铃字符),后跟换行符。但是你的终端模拟器不会响起铃声(铃声字符是不是显示,因为它是控制字符

顺便说一句,据传 Apple 不喜欢 GPLv3+ 许可证,因此您可能会升级您的 bash到您的 Apple 计算机上的最新版本(例如 2017 年 8 月的 4.4)。

你可能会读到tty 揭秘了解 Unix 上终端仿真器的历史方法。也可以看看私人有限公司(7)

相关内容