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:
- Ce „s
$"\a"
aici? Extinderea parametrilor, substituirea comenzii sau altceva? - 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) .
$'...'
nu este ' nu s-a numit " eliminarea citatelor ", dar manualulbash
' nu îi dă un nume. Această formă de citare este susținută și de cel puținksh93
shell, dar nu depdksh
. Cred că ' este o extensie a sintaxei POSIX.