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:
- Wat is
$"\a"
hier? Parameteruitbreiding, opdrachtvervanging of iets anders? - 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) .
$'...'
isn ' riep " citaatverwijdering ", maar debash
handleiding geeft het geen naam '. Deze vorm van citeren wordt ook ondersteund door ten minste deksh93
shell maar niet doorpdksh
. Ik geloof dat het ' een uitbreiding is van de POSIX-syntaxis.