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:
- Cosa “s
$"\a"
qui? Espansione dei parametri, sostituzione dei comandi o qualcosaltro? - Perché
echo
stampa una riga vuota come se il parametro non fosse definito, come ad esempio, nel caso di
$ echo $NONSENSE
quale richiede una riga vuota? Grazie!
Risposta
don “t fare qualsiasi suono su Ubuntu:
forse perché il tuo particolare emulatore di terminale è configurato per evitare i suoni o perché il modulo del kernel pcspkr
è scaricato, ecc … Potresti usare un altro emulatore di terminale (ad esempio il vecchio xterm
) che dovrebbe emettere un segnale acustico.
Cosa cè “
$"\a"
qui?
Leggi il capitolo sullespansione della shell del manuale di Bash. Si chiama ANSI-C quoting (come commentato da South Parker ).
Perché echo stampa una riga vuota
il comando echo
(ulteriori informazioni echo (1) …) è spesso un shell bash integrato quindi (senza alcun -n
) stampa i suoi argomenti espansi (qui il carattere campana) seguiti da una nuova riga. Ma lemulatore di terminale non fa suonare il campanello (e il carattere della campana non viene visualizzato, poiché è un carattere di controllo )
A proposito, si dice che Apple non gradisca la licenza GPLv3 +, quindi potresti aggiornare la tua bash
a una versione recente (ad esempio 4.4 nellagosto 2017) sul tuo computer Apple.
Potresti leggere tty demistificato per un approccio storico agli emulatori di terminale su Unix. Vedi anche pty (7) .
$'...'
non è ' t ha chiamato " rimozione citazione ", ma il manualebash
' t gli dà un nome. Questa forma di citazione è supportata almeno daksh93
shell ma non dapdksh
. Credo che ' sia unestensione della sintassi POSIX.