Mecanismo do caractere SINO ' \ a '?

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:

  1. O que “está $"\a" aqui? Expansão de parâmetro, substituição de comando ou outra coisa?
  2. 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) .

Comentários

  • Isso ' é intensamente informativo, muito obrigado! 🙂
  • $'...' não ' t chamado " remoção de citação ", mas o bash manual não ' não lhe dá um nome. Esta forma de citação também é compatível, pelo menos, com ksh93 shell, mas não por pdksh. Eu acredito que ' é uma extensão da sintaxe POSIX.
  • Kusalananda Eu acho que você está certo, a sintaxe é chamada ASCI-C entre aspas: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, aquele ' é o nome dele. Obrigado por me ajudar a lembrar!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *