Mekanism för BELL-tecken ' \ a '?

Jag läser en bok om skalprogrammering och lär mig att följande kommandon är ekvivalenta, vilket piper på min Mac men inte ger något ljud på Ubuntu:

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

men i båda fallen uppmanar terminalen en tom rad. Mina frågor är:

  1. Vad ”s $"\a" här? Parameterutvidgning, kommandosubstitution eller något annat?
  2. Varför echo skriver ut en tom rad som om parametern är odefinierad, som till exempel i fallet med

$ echo $NONSENSE vilken uppmanas tom rad? Tack!

Svar

don ”t göra något ljud på Ubuntu:

kanske för att din specifika terminalemulator är konfigurerad till undvik ljud, eller för att pcspkr kärnmodulen är urladdad, osv … Du kan använda en annan terminalemulator (t.ex. den gamla xterm) vilket bör pipa.

Vad ”s $"\a" här?

Läs kapitel om skalutvidgning i Bash-handboken. Det heter ANSI-C-citat (som kommenterat av South Parker ).

Varför eko skriver ut tom rad

kommandot echo (läs mer echo (1) …) är ofta ett bash-skal inbyggt så (utan någon -n) den skriver ut sina utökade argument (här klockteckenet) följt av en ny rad. Men din terminalemulator ringer inte den hörbara klockan (och klocktecknet visas inte eftersom det är ett kontrolltecken )

BTW, Apple ryktas att de ogillar GPLv3 + -licensen, så du kan uppgradera din bash till en ny version (t.ex. 4.4 i augusti 2017) på din Apple-dator.

Du kan läsa tty avmystifierad för en historisk strategi till terminalemulatorer på Unix. Se även pty (7) .

Kommentarer

  • Att ' är intensivt informativt, stort tack! 🙂
  • $'...' är inte ' t heter " borttagning av offert ", men bash manual ' t ger det ett namn. Denna form av citat stöds också av åtminstone ksh93 skal men inte av pdksh. Jag tror att det ' är en förlängning av POSIX-syntaxen.
  • Kusalananda Jag tror att du har rätt, syntaxen heter ASCI-C och citerar: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, att ' s namnet på den. Tack för att du hjälpte mig att komma ihåg!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *