Mechanismus des BELL-Zeichens ' \ a '?

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:

  1. Was ist hier $"\a"? Parametererweiterung, Befehlssubstitution oder etwas anderes?
  2. 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 als bash ' gibt ihm keinen Namen. Diese Form des Zitierens wird auch von mindestens ksh93 Shell, aber nicht von pdksh. 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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.