我正在阅读一本有关 shell 编程的书,并了解到以下命令是等效的,这些命令在我的 Mac 上发出蜂鸣声,但在 Ubuntu 上不发出任何声音:
$ echo $'\a'
$ echo -e "\a"
$
但是在这两种情况下,终端都会提示空行。我的问题是:
- 这里是什么
$'\a'
?参数扩展、命令替换还是其他什么? - 为什么
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)。