Čtu knihu o programování shellu a učím se, že následující příkazy jsou ekvivalentní, které na mém Macu pípají, ale na Ubuntu nevydávají žádný zvuk:
$ echo $'\a'
$ echo -e "\a"
$
v obou případech však terminál vyzve prázdný řádek. Moje otázky jsou:
- Co je
$'\a'
tady? Rozšíření parametrů, substituce příkazů nebo něco jiného? - Proč
echo
vypíše prázdný řádek, jako by parametr nebyl definován, jako například v případě
$ echo $NONSENSE
který vyzve prázdný řádek? Díky!
Přijatá odpověď:
nevydávejte na Ubuntu žádný zvuk:
možná proto, že váš konkrétní emulátor terminálu je nakonfigurován tak, aby se vyhnul zvukům, nebo proto, že pcspkr
modul jádra je uvolněn atd... Můžete použít jiný emulátor terminálu (např. starý xterm
), který by měl pípnout.
Co je
$'\a'
tady?
Přečtěte si kapitolu o rozšíření shellu v příručce Bash. Říká se tomu citace ANSI-C (jak komentoval South Parker).
Proč echo tiskne prázdný řádek
echo
příkaz (více informací echo(1)…) je často vestavěný shell bash, takže (bez -n
) vypíše své rozšířené argumenty (zde znak zvonku) následované novým řádkem. Ale váš emulátor terminálu nezvoní slyšitelný zvonek (a znak zvonku není zobrazeno, protože se jedná o řídicí znak)
BTW, říká se, že Apple nemá rád licenci GPLv3+, takže byste mohli upgradovat svůj bash
na nejnovější verzi (např. 4.4 v srpnu 2017) na vašem počítači Apple.
Můžete si přečíst tty demystifikované pro historický přístup k emulátorům terminálu na Unixu. Viz také pty(7).