Mecanismul caracterului BELL ' \ a '?

Citesc o carte despre programarea shell și învăț că următoarele comenzi sunt echivalente, care sună pe Mac-ul meu, dar nu scot niciun sunet pe Ubuntu:

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

totuși, în ambele cazuri, terminalul solicită o linie goală. Întrebările mele sunt:

  1. Ce „s $"\a" aici? Extinderea parametrilor, substituirea comenzii sau altceva?
  2. De ce echo tipărește o linie goală ca și cum parametrul este nedefinit, de exemplu, în cazul

$ echo $NONSENSE care solicită o linie goală? Mulțumesc!

Răspunde

don „t faceți sunet pe Ubuntu:

poate pentru că emulatorul dvs. de terminal este configurat pentru evita sunetele sau pentru că modulul kernel pcspkr este descărcat etc … Ați putea folosi un alt emulator de terminal (de ex. xterm) care ar trebui să emită un semnal sonor.

Ce „s $"\a" aici?

Citiți capitolul despre extinderea shell a manualului Bash. Se numește Citarea ANSI-C (după cum a comentat South Parker ).

De ce ecoul imprimă o linie goală

comanda echo (citiți mai multe echo (1) …) este adesea un shell bash builtin deci (fără -n) imprimă argumentele sale extinse (aici caracterul clopotului) urmate de o linie nouă. Dar emulatorul terminalului dvs. nu sună clopotul sonor (iar caracterul clopotului este nu afișat, deoarece este un caracter de control )

BTW, se zvonește că Apple nu-i place licența GPLv3 +, deci s-ar putea să vă actualizați bash la o versiune recentă (de exemplu, 4.4 în august 2017) de pe computerul dvs. Apple.

S-ar putea să citiți tty demistificat pentru o abordare istorică către emulatoare de terminale pe Unix. Consultați și pty (7) .

Comentarii

  • Acel ' este intens informativ, imens mulțumesc! 🙂
  • $'...' nu este ' nu s-a numit " eliminarea citatelor ", dar manualul bash ' nu îi dă un nume. Această formă de citare este susținută și de cel puțin ksh93 shell, dar nu de pdksh. Cred că ' este o extensie a sintaxei POSIX.
  • Kusalananda Cred că ai dreptate, sintaxa se numește ASCI-C citând: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, ' este numele acestuia. Vă mulțumim că m-ați ajutat să-mi amintesc!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *