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é
echostampa 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 daksh93shell ma non dapdksh. Credo che ' sia unestensione della sintassi POSIX.