Mechanisme van BELL-teken ' \ a '?

Ik “ben een boek aan het lezen over shell-programmering en leer dat de volgende commandos equivalent zijn, die piepen op mijn Mac maar geen geluid maken op Ubuntu:

$ echo $"\a" $ echo -e "\a" $ 

echter in beide gevallen vraagt terminal om een lege regel. Mijn vragen zijn:

  1. Wat is $"\a" hier? Parameteruitbreiding, opdrachtvervanging of iets anders?
  2. Waarom echo drukt een lege regel af alsof de parameter niet is gedefinieerd, zoals bijvoorbeeld in het geval van

$ echo $NONSENSE welke vraagt om een lege regel? Bedankt!

Antwoord

don “t maak enig geluid op Ubuntu:

misschien omdat uw specifieke terminalemulator is geconfigureerd om geluiden vermijden, of omdat de pcspkr kernelmodule is verwijderd, enz … Je zou een andere terminalemulator kunnen gebruiken (bijv. de oude xterm) die moet piepen.

Wat “is $"\a" hier?

Lees het hoofdstuk over shell-uitbreiding van de Bash-handleiding. Het heet ANSI-C citeren (zoals opgemerkt door South Parker ).

Waarom echo een lege regel afdrukt

het echo commando (lees meer echo (1) …) is vaak een bash shell ingebouwd , dus (zonder enige -n) het drukt zijn uitgebreide argumenten af (hier het belkarakter) gevolgd door een nieuwe regel. Maar uw terminalemulator laat de hoorbare bel niet rinkelen (en het belkarakter wordt niet weergegeven, omdat het een controleteken is)

Tussen haakjes, het gerucht gaat dat Apple een hekel heeft aan de GPLv3 + -licentie, dus je zou je bash naar een recente versie (bijv. 4.4 in augustus 2017) op uw Apple-computer.

Misschien leest u the tty gedemystificeerd voor een historische benadering naar terminalemulators op Unix. Zie ook pty (7) .

Reacties

  • Dat ' is intens informatief, heel erg bedankt! 🙂
  • $'...' isn ' riep " citaatverwijdering ", maar de bash handleiding geeft het geen naam '. Deze vorm van citeren wordt ook ondersteund door ten minste de ksh93 shell maar niet door pdksh. Ik geloof dat het ' een uitbreiding is van de POSIX-syntaxis.
  • Kusalananda Ik denk dat je gelijk hebt, de syntaxis heet ASCI-C onder vermelding van: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, dat ' s de naam ervan. Bedankt dat je me helpt herinneren!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *