
Intenté crear un archivo de texto en un script bash.
El echo
comando abarca varias líneas y tiene algunas comillas dobles "".
#!/bin/bash
echo "blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla" > /root/bin/bla
Hay muchas comillas dobles "" en echo
el comando que no son deseables.
Y lo hice
#!/bin/bash
echo 'blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla' > /root/bin/bla
Me preguntaba si hay alguna diferencia entre comillas dobles " y comillas simples '
¿Cuál tiene mayor prioridad? ¿Es simplemente el hecho de que son visualmente diferentes?
Respuesta1
Desde elmanual de bash:
3.1.2.2 Comillas simples
Al incluir caracteres entre comillas simples ('''), se conserva el valor literal de cada carácter entre comillas. No puede aparecer una comilla simple entre comillas simples, incluso si van precedidas de una barra invertida.
3.1.2.3 Comillas dobles
Encerrar caracteres entre comillas dobles ('"') conserva el valor literal de todos los caracteres entre comillas, con la excepción de '$', '`', '\' y, cuando la expansión del historial está habilitada, '!'. Los caracteres '$' y '`' conservan su significado especial entre comillas dobles (consulte Extensiones de Shell. La barra invertida conserva su significado especial solo cuando va seguida de uno de los siguientes caracteres: '$', '`', '"', '). \', o nueva línea. Entre comillas dobles, se eliminan las barras invertidas seguidas de uno de estos caracteres. Las barras invertidas que preceden a caracteres sin un significado especial no se modifican. Una comilla doble se puede citar entre comillas dobles precediéndola de una barra invertida. Si está habilitado, se realizará la expansión del historial a menos que aparezca un '!' que aparece entre comillas dobles se escapa mediante una barra invertida. La barra invertida que precede al '!' no se elimina. Los parámetros especiales '*' y '@' tienen un significado especial cuando están entre comillas dobles (consulte Expansión de parámetros de Shell).
Aquí hay algunas demostraciones prácticas de lo anterior:
- Las comillas dobles permiten la evaluación de expansiones de parámetros, pero las comillas simples no:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
- Las comillas dobles permiten la evaluación de los escapes de barras invertidas, pero las comillas simples no:
$ echo "\\"
\
$ echo '\\'
\\
- Las comillas dobles permiten la evaluación de sustituciones de comandos (
$(
,`
), pero las comillas simples no:
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)