Ich lese ein Buch über Shell-Programmierung und erfahre, dass die folgenden Befehle gleichwertig sind, die auf meinem Mac piepen, aber auf Ubuntu keinen Ton erzeugen:
$ echo $'\a'
$ echo -e "\a"
$
In beiden Fällen fordert das Terminal jedoch eine Leerzeile auf. Meine Fragen sind:
- Was ist
$'\a'
hier? Parametererweiterung, Befehlsersetzung oder etwas anderes? - Warum
echo
gibt eine leere Zeile aus, als ob der Parameter undefiniert wäre, wie zum Beispiel im Fall von
$ echo $NONSENSE
was fordert eine leere Zeile auf? Danke!
Akzeptierte Antwort:
unter Ubuntu keinen Ton machen:
vielleicht, weil Ihr spezieller Terminal-Emulator so konfiguriert ist, dass er Töne vermeidet, oder weil der pcspkr
Kernel-Modul wird entladen usw. Sie könnten einen anderen Terminal-Emulator verwenden (z. B. den alten xterm
), was piepen sollte.
Was ist $'\a'
hier?
Lesen Sie das Kapitel zur Shell-Erweiterung des Bash-Handbuchs. Es wird ANSI-C-Quoting genannt (wie von South Parker kommentiert).
Warum echo eine leere Zeile ausgibt
das echo
Befehl (weiterlesen echo(1)…) ist oft eine eingebaute Bash-Shell (ohne -n
) gibt es seine erweiterten Argumente (hier das Glockenzeichen) gefolgt von einem Zeilenumbruch aus. Aber Ihr Terminal-Emulator läutet nicht die akustische Glocke (und das Glockenzeichen ist nicht angezeigt, da es sich um ein Steuerzeichen handelt)
Übrigens wird gemunkelt, dass Apple die GPLv3+-Lizenz nicht mag, also sollten Sie Ihre bash
aktualisieren auf eine neuere Version (z. B. 4.4 im August 2017) auf Ihrem Apple-Computer.
Sie könnten das entmystifizierte tty für einen historischen Ansatz zu Terminalemulatoren unter Unix lesen. Siehe auch pty(7).