Czytam książkę na temat programowania powłoki i dowiaduję się, że następujące polecenia są równoważne, które brzmią na moim Macu, ale nie wydają żadnego dźwięku w systemie Ubuntu:
$ echo $"\a" $ echo -e "\a" $
jednak w obu przypadkach terminal wyświetla pustą linię. Moje pytania to:
- Co „s
$"\a"
tutaj? Rozwijanie parametrów, podstawianie poleceń czy coś innego? - Dlaczego
echo
wyświetla pustą linię, tak jakby parametr był niezdefiniowany, jak na przykład w przypadku
$ echo $NONSENSE
co powoduje wyświetlenie pustej linii? Dzięki!
Odpowiedz
nie „t zrobić jakikolwiek dźwięk w Ubuntu:
być może dlatego, że twój konkretny emulator terminala jest skonfigurowany do unikaj dźwięków lub ponieważ moduł jądra pcspkr
jest wyładowany, itd. … Możesz użyć innego emulatora terminala (np. starego xterm
) co powinno być sygnalizowane.
Co tutaj jest
$"\a"
?
Przeczytaj rozdział poświęcony rozszerzaniu powłoki w podręczniku Bash. Nazywa się on cytowanie ANSI-C (komentarz South Parker ).
Dlaczego echo drukuje pustą linię
polecenie echo
(czytaj więcej echo (1) …) jest często wbudowaną powłoką bash , więc (bez -n
) wypisuje swoje rozwinięte argumenty (tutaj znak dzwonka), po których następuje nowa linia. Jednak emulator terminala nie emituje dźwięku dzwonka (a znak dzwonka nie jest wyświetlany, ponieważ jest to znak kontrolny )
Przy okazji, Apple podobno nie lubi licencji GPLv3 +, więc możesz zaktualizować bash
do najnowszej wersji (np. 4.4 z sierpnia 2017 r.) na komputerze Apple.
Możesz przeczytać tty zdemistyfikowany , aby zapoznać się z historycznym podejściem do emulatorów terminali w systemie Unix. Zobacz także pty (7) .
$'...'
nie jest ' t nazywa " usuwanie cytatów ", alebash
instrukcja nie ' nie nadaje mu nazwy. Ta forma cytowania jest również obsługiwana przynajmniej przezksh93
, ale nie przezpdksh
. Uważam, że ' jest rozszerzeniem składni POSIX.