Escape-Characters

BELL 字元“a”的機制?

  • August 22, 2017

我正在閱讀一本關於 shell 程式的書,並了解到以下命令是等效的,它們在我的 Mac 上發出嗶嗶聲,但在 Ubuntu 上沒有任何聲音:

$ echo $'\a'

$ echo -e "\a"

$

但是在這兩種情況下,終端都會提示一個空行。我的問題是:

  1. 這是什麼$'\a'?參數擴展、命令替換還是其他?
  2. 為什麼echo列印空行,就好像參數未定義一樣,例如,在

$ echo $NONSENSE哪個提示空行?謝謝!

不要在 Ubuntu 上發出任何聲音:

可能是因為您的特定終端仿真器被配置為避免聲音,或者因為pcspkr核心模組已解除安裝等…您可以使用另一個xterm應該發出嗶嗶聲的終端仿真器(例如舊的)。

這是什麼$'\a'

閱讀Bash 手冊中關於 shell 擴展的章節。它被稱為ANSI-C 引用(由South Parker評論)。

為什麼 echo 列印空行

echo命令(閱讀更多echo(1) …)通常是內置的 bash shell,因此(沒有任何-n)它會列印其擴展參數(此處為響鈴字元),後跟換行符。但是您的終端仿真器不會響鈴(並且不會顯示鈴鐺字元,因為它是控製字元

順便說一句,有傳言稱 Apple 不喜歡 GPLv3+ 許可證,因此您可以 bash在 Apple 電腦上升級到最新版本(例如 2017 年 8 月的 4.4)。

您可能會閱讀tty來了解 Unix 上終端仿真器的歷史方法。另見pty(7)

引用自:https://unix.stackexchange.com/questions/387569