Estou lendo um livro sobre programação shell e aprendendo que os seguintes comandos são equivalentes, que emitem um bipe no meu Mac, mas não fazem nenhum som no Ubuntu:
$ echo $"\a" $ echo -e "\a" $
entretanto, em ambos os casos, o terminal solicita uma linha em branco. Minhas perguntas são:
- O que “está
$"\a"
aqui? Expansão de parâmetro, substituição de comando ou outra coisa? - Por que
echo
imprime uma linha vazia como se o parâmetro fosse indefinido, como por exemplo, no caso de
$ echo $NONSENSE
que exibe uma linha vazia? Obrigado!
Resposta
don “t faça qualquer som no Ubuntu:
talvez porque seu emulador de terminal específico esteja configurado para evite sons ou porque o pcspkr
módulo do kernel foi descarregado, etc … Você pode usar outro emulador de terminal (por exemplo, o antigo xterm
) que deve soar.
O que “há
$"\a"
aqui?
Leia o capítulo sobre a expansão do shell do manual do Bash. Chama-se Citação ANSI-C (conforme comentado por South Parker ).
Por que o echo imprime uma linha vazia
o comando echo
(leia mais echo (1) …) é frequentemente um shell bash integrado , portanto (sem qualquer -n
) ele imprime seus argumentos expandidos (aqui o caractere de sino) seguidos por uma nova linha. Mas seu emulador de terminal não toca a campainha audível (e o caractere da campainha não é exibido, pois é um caractere de controle )
A propósito, há rumores de que a Apple não gosta da licença GPLv3 +, então você pode atualizar sua bash
para uma versão recente (por exemplo, 4.4 em agosto de 2017) em seu computador Apple.
Você pode ler o tty desmistificado para uma abordagem histórica para emuladores de terminal no Unix. Veja também pty (7) .
$'...'
não ' t chamado " remoção de citação ", mas obash
manual não ' não lhe dá um nome. Esta forma de citação também é compatível, pelo menos, comksh93
shell, mas não porpdksh
. Eu acredito que ' é uma extensão da sintaxe POSIX.