Esta pregunta ya tiene una respuesta aquí:
- En bash, ¿cómo escapo de un signo de exclamación? 5 respuestas
No puedo entender cómo escribir un !
símbolo en los scripts de bash cuando lo pongo entre comillas dobles.
Por ejemplo:
var="hello! my name is $name! bye!"
Algo loco sucede si escribo los siguientes comandos:
$ age=20
$ name='boda'
$ var="hello! my name is $name! bye!"
Cuando presiono enter en el último comando, el comando se repite (se escribe a sí mismo) sin el último !
:
var="hello! my name is $name! bye"
Si presiono enter nuevamente:
$ var="hello! my name is $name bye"
Si presiono enter nuevamente, desaparece, no se genera nada:
$
Si intento esto:
$ echo "hello\! my name is $name\! bye\!"
Luego sale: hello\! my name is boda\! bye\!
Si uso comillas simples, entonces mi nombre no se expande:
$ echo 'hello! my name is $name! bye!'
Las salidas son: hello! my name is $name! bye!
Lo tengo trabajando de esta manera:
$ echo "hello"'!'" my name is $name"'!'" bye"'!'
Pero es un gran desastre "
e '
imposible de entender / editar / mantener / actualizar.
¿Alguien puede ayudar?
$name
no se expande!echo $var
, respóndeme conhello! my name is boda! bye!
. ¿Estás seguro de que no escribistevar="hello! my name is $name! bye" !!
?echo hi
enter y luego!!
enter. Compruebe si lo expande antes de ejecutarlo. Quizásset +o histexpand
pueda ayudar.Respuestas:
Su código será más fácil de leer si lo hace así:
&&
- El segundo comandoecho $var
se ejecuta solo si el primer comandovar="hello! my name is $name! bye!"
tiene éxito.:~$
- No se escribe en este ejemplo porque denota el indicador bash.!
- No necesita escapar del!
comando anterior porque está dentro de un par de comillas dobles.fuente
set +H
como se sugiere en el duplicado detiene esto.linux
etiqueta, por lo que el ejemplo en mi respuesta se ejecutó en Linux en Ubuntu 14.04 (gnome-terminal). Vi unMacOS
directorio en su captura de pantalla, aunque no estoy seguro si la captura de pantalla fue tomada de una computadora Mac o si esto tiene algo que ver con obtener dos resultados diferentes al ejecutar el mismo comando en dos computadoras diferentes."/some/dummy/command"
presione Entrar (obtendrá "No existe tal archivo o directorio") y luego repita los pasos anteriores.!"
y presionando Intro obtendrá ese comando ficticio nuevamente. La historia se expande.