Estoy leyendo un libro sobre programación de shell y aprendiendo que los siguientes comandos son equivalentes, que emiten un pitido en mi Mac pero no hacen ningún sonido en Ubuntu:
$ echo $"\a" $ echo -e "\a" $
sin embargo, en ambos casos, el terminal muestra una línea en blanco. Mis preguntas son:
- ¿Qué «s
$"\a"
aquí? Expansión de parámetros, sustitución de comandos u otra cosa? - Por qué
echo
imprime una línea vacía como si el parámetro no estuviera definido, como por ejemplo, en el caso de
$ echo $NONSENSE
¿Qué indica una línea vacía? ¡Gracias!
Responder
don «t hacer cualquier sonido en Ubuntu:
quizás porque su emulador de terminal particular está configurado para evitar sonidos, o porque el pcspkr
módulo del kernel está descargado, etc. Podría usar otro emulador de terminal (por ejemplo, el antiguo xterm
) que debería emitir un pitido.
¿Qué «s
$"\a"
aquí?
Lea el capítulo sobre expansión de shell del manual de Bash. Se llama Citas ANSI-C (según lo comentado por South Parker ).
Por qué echo imprime una línea vacía
el comando echo
(leer más echo (1) …) es a menudo un bash shell incorporado , por lo que (sin -n
) imprime sus argumentos expandidos (aquí el carácter de campana) seguidos de una nueva línea. Pero su emulador de terminal no hace sonar el timbre audible (y el carácter de campana no se muestra, ya que es un carácter de control )
Por cierto, se rumorea que a Apple no le gusta la licencia GPLv3 +, por lo que puede actualizar su bash
a una versión reciente (por ejemplo, 4.4 en agosto de 2017) en su computadora Apple.
Puede leer el tty desmitificado para un enfoque histórico a emuladores de terminal en Unix. Consulte también pty (7) .
$'...'
no es ' t llamó " eliminación de comillas ", pero elbash
manual no ' t le da un nombre. Esta forma de citación también es compatible con al menos laksh93
shell pero no porpdksh
. Creo que ' es una extensión de la sintaxis POSIX.