Ich lese ein Buch über Shell-Programmierung und lerne, dass die folgenden Befehle gleichwertig sind. Diese piepen auf meinem Mac, machen aber unter Ubuntu keinen Ton:
$ echo $"\a" $ echo -e "\a" $
In beiden Fällen fordert das Terminal jedoch eine Leerzeile auf. Meine Fragen sind:
- Was ist hier
$"\a"
? Parametererweiterung, Befehlssubstitution oder etwas anderes? - Warum
echo
druckt eine leere Zeile, als ob der Parameter undefiniert wäre, wie zum Beispiel im Fall von
$ echo $NONSENSE
was fordert zur Eingabe einer leeren Zeile auf? Danke!
Antwort
don „t Machen Sie unter Ubuntu einen Ton:
Vielleicht, weil Ihr bestimmter Terminalemulator für konfiguriert ist Vermeiden Sie Sounds oder weil das Kernelmodul pcspkr
entladen ist usw. Sie könnten einen anderen Terminalemulator verwenden (z. B. den alten xterm
). was piepen sollte.
Was ist
$"\a"
hier?
Lesen Sie das Kapitel zur Shell-Erweiterung des Bash-Handbuchs. Es heißt ANSI-C-Zitat (wie von South Parker kommentiert).
Warum Echo leere Zeilen druckt
den Befehl echo
(lesen Sie mehr echo (1) …) ist häufig eine eingebaute Bash-Shell (ohne -n
) druckt seine erweiterten Argumente (hier das Glockenzeichen) gefolgt von einem Zeilenumbruch. Ihr Terminalemulator läutet jedoch nicht die akustische Klingel (und das Klingelzeichen wird nicht angezeigt, da es sich um ein Steuerzeichen handelt).
Übrigens, Apple soll die GPLv3 + -Lizenz nicht mögen, daher könnten Sie Ihre bash
auf eine aktuelle Version (z. B. 4.4 im August 2017) auf Ihrem Apple-Computer.
Für einen historischen Ansatz lesen Sie möglicherweise den entmystifizierten tty zu Terminalemulatoren unter Unix. Siehe auch pty (7) .
Kommentare
- Das ' ist sehr informativ, vielen Dank! 🙂
-
$'...'
ist nicht ' wird nicht als " Zitatentfernung " bezeichnet, sondern alsbash
' gibt ihm keinen Namen. Diese Form des Zitierens wird auch von mindestensksh93
Shell, aber nicht vonpdksh
. Ich glaube, es ist ' eine Erweiterung der POSIX-Syntax. - Kusalananda Ich denke, Sie haben Recht, die Syntax heißt ASCI-C und zitiert: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
- @SouthParker Ah, das ' s der Name davon. Vielen Dank, dass Sie mir geholfen haben, mich zu erinnern!