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:
- Vad ”s
$"\a"
här? Parameterutvidgning, kommandosubstitution eller något annat? - 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) .
$'...'
är inte ' t heter " borttagning av offert ", menbash
manual ' t ger det ett namn. Denna form av citat stöds också av åtminstoneksh93
skal men inte avpdksh
. Jag tror att det ' är en förlängning av POSIX-syntaxen.