BELL-merkin mekanismi ' \ a '?

Luen kirjaa shell-ohjelmoinnista ja opin, että seuraavat komennot ovat vastaavia, jotka piippaavat Mac-tietokoneellani, mutta eivät anna ääntä Ubuntussa:

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

kuitenkin molemmissa tapauksissa pääte pyytää tyhjää riviä. Kysymykseni ovat:

  1. Mitä ”s $"\a" täällä? Parametrilaajennus, komentojen korvaaminen tai jotain muuta?
  2. miksi echo tulostaa tyhjän rivin ikään kuin parametria ei ole määritelty, kuten esimerkiksi

$ echo $NONSENSE mikä kysyy tyhjää riviä? Kiitos!

Vastaa

älä t toista mitään ääntä Ubuntussa:

ehkä siksi, että tietty pääteemulaattori on määritetty Vältä ääniä tai koska pcspkr -ydinmoduuli on purettu jne. … Voit käyttää toista pääteemulaattoria (esim. vanha xterm) jonka pitäisi antaa äänimerkki.

Mitä ”s $"\a" täällä?

Lue Bash-käsikirjan luku kuoren laajentamisesta . Sitä kutsutaan nimellä ANSI-C-lainaus (kommentoi South Parker ).

Miksi kaiku tulostaa tyhjän rivin

komento echo (lue lisää echo (1) …) on usein sisäänrakennettu bash-kuori (ilman -n) se tulostaa laajennetut argumenttinsa (tässä kellomerkki) ja sen jälkeen uuden rivin. Mutta pääteemulaattorisi ei soi kuultavaa kelloa (ja kellomerkkiä ei näytetä, koska se on ohjainmerkki )

BTW, Apple huhutaan pitävän GPLv3 + -lisenssistä, joten voit päivittää bash uusimpaan versioon (esim. 4.4 elokuussa 2017) Apple-tietokoneellasi.

Saatat lukea tty demystified historiallisena lähestymistapana. Unixin pääteemulaattoreihin. Katso myös pty (7) .

Kommentit

  • Se ' s intensiivisesti informatiivinen, kiitos! 🙂
  • $'...' isn ' t kutsui " lainauksen poisto ", mutta bash manuaalinen ei anna ' t sille nimeä. Tätä lainausmuotoa tukee myös ainakin ksh93 -kuori, mutta ei pdksh. Uskon, että se ' on jatko POSIX-syntaksille.
  • Kusalananda Luulen, että olet oikeassa, syntaksia kutsutaan nimellä ASCI-C lainaamalla: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, että ' s sen nimi. Kiitos, että autat minua muistamaan!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *