Mekanisme for BELL-tegn ' \ a '?

Jeg leser en bok om skallprogrammering og lærer at følgende kommandoer er likeverdige, som piper på min Mac, men som ikke gir noen lyd på Ubuntu:

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

men i begge tilfeller ber terminalen om en tom linje. Mine spørsmål er:

  1. Hva «s $"\a" her? Parameterutvidelse, kommandosubstitusjon eller noe annet?
  2. Hvorfor echo skriver ut en tom linje som om parameteren er udefinert, som for eksempel i tilfelle

$ echo $NONSENSE hvilken ber tom linje? Takk!

Svar

don «t lage lyd på Ubuntu:

kanskje fordi din spesifikke terminalemulator er konfigurert til unngå lyder, eller fordi pcspkr kjernemodulen er lastet av osv … Du kan bruke en annen terminalemulator (f.eks. den gamle xterm) som skal pippe.

Hva «s $"\a" her?

Les kapittelet om skallutvidelse i Bash-manualen. Det kalles ANSI-C sitering (som kommentert av South Parker ).

Hvorfor ekko skriver ut tom linje

echo -kommandoen (les mer ekko (1) …) er ofte en bash shell innebygd så (uten noen -n) den skriver ut de utvidede argumentene (her bjellekarakteren) etterfulgt av en ny linje. Men terminalemulatoren din ringer ikke hørbar bjelle (og bjelletegnet vises ikke siden det er et kontrolltegn )

BTW, det ryktes at Apple misliker GPLv3 + -lisensen, så du kan oppgradere bash til en nylig versjon (f.eks. 4.4 i august 2017) på Apple-datamaskinen din.

Du kan lese tty avmystifisert for en historisk tilnærming til terminalemulatorer på Unix. Se også pty (7) .

Kommentarer

  • At ' er intenst informativ, stor takk! 🙂
  • $'...' er ikke ' t heter " fjerning av sitat ", men bash manual gir det ikke '. Denne sitatformen støttes også av minst ksh93 skall, men ikke av pdksh. Jeg tror det ' er en utvidelse av POSIX-syntaksen.
  • Kusalananda Jeg tror du har rett, syntaksen heter ASCI-C og siterer: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, at ' er navnet på den. Takk for at du hjalp meg med å huske!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *