Bash Citando texto literal


Ejemplo

Todos los ejemplos en este párrafo imprimen la línea.

!"#$&'()*;<=>?  @[\]^`{|}~

Una barra invertida cita el siguiente carácter, es decir, el siguiente carácter se interpreta literalmente. La única excepción es una nueva línea: backslash-newline se expande a la cadena vacía.

echo \!\"\#\$\&\'\(\)\*\;\<\=\>\?\ \ \@\[\\\]\^\`\{\|\}\~

Todo el texto entre comillas simples (citas hacia adelante ' , también conocido como apóstrofe) se imprime literalmente. Incluso la barra invertida significa por sí misma, y ​​es imposible incluir una sola cita; en su lugar, puede detener la cadena literal, incluir una comilla simple literal con una barra diagonal inversa y volver a iniciar la cadena literal. Por lo tanto, la secuencia de 4 caracteres '\'' permite efectivamente incluir una comilla simple en una cadena literal.

echo '!"#$&'\''()*;<=>?  @[\]^`{|}~'
#          ^^^^

Dollar-single-quote inicia una cadena literal $'…' como muchos otros lenguajes de programación, donde la barra invertida cita el siguiente carácter.

echo $'!"#$&\'()*;<=>?  @[\\]^`{|}~'
#           ^^            ^^

Las comillas dobles " delimitan cadenas semi-literales donde solo los caracteres " \ $ y ` conservan su significado especial. Estos caracteres necesitan una barra invertida delante de ellos (tenga en cuenta que si la barra invertida va seguida de algún otro carácter, la barra invertida permanece). Las comillas dobles son útiles sobre todo cuando se incluye una variable o una sustitución de comando.

echo "!\"#\$&'()*;<=>?  @[\\]^\`{|}~"
#      ^^                 ^^  ^^
echo "!\"#\$&'()*;<=>?  @[\]^\`{|}~"
#      ^^                 ^  ^^      \[ prints \[

¡Interactivamente, ten cuidado con eso ! desencadena la expansión del historial entre comillas dobles: "!oops" busca un comando antiguo que contenga oops ; "\!oops" no hace expansión de historial pero mantiene la barra invertida. Esto no sucede en los scripts.