Sto leggendo un libro sulla programmazione della shell e sto imparando che i seguenti comandi sono equivalenti, che emettono un segnale acustico sul mio Mac ma non emettono alcun suono su Ubuntu:
$ echo $'\a'
$ echo -e "\a"
$
tuttavia in entrambi i casi, il terminale richiede una riga vuota. Le mie domande sono:
- Cos'è
$'\a'
qui? Espansione dei parametri, sostituzione dei comandi o qualcos'altro? - Perché
echo
stampa una riga vuota come se il parametro non fosse definito, come ad esempio nel caso di
$ echo $NONSENSE
che richiede una riga vuota? Grazie!
Risposta accettata:
non emettere alcun suono su Ubuntu:
forse perché il tuo particolare emulatore di terminale è configurato per evitare suoni, o perché il pcspkr
il modulo del kernel è stato scaricato, ecc... Potresti usare un altro emulatore di terminale (ad esempio il vecchio xterm
) che dovrebbe emettere un segnale acustico.
Cos'è $'\a'
qui?
Leggi il capitolo sull'espansione della shell del manuale di Bash. Si chiama citazione ANSI-C (come commentato da South Parker).
Perché echo stampa una riga vuota
l'echo
comando (leggi di più echo(1)…) è spesso una shell bash incorporata quindi (senza alcun -n
) stampa i suoi argomenti espansi (qui il carattere campanello) seguiti da una nuova riga. Ma il tuo emulatore di terminale non suona la campana udibile (e il carattere della campana non visualizzato, poiché è un carattere di controllo)
A proposito, si dice che Apple non apprezzi la licenza GPLv3+, quindi potresti aggiornare il tuo bash
a una versione recente (ad es. 4.4 ad agosto 2017) sul tuo computer Apple.
Potresti leggere il tty demistificato per un approccio storico agli emulatori di terminale su Unix. Vedi anche pty(7).