¿Diferencias entre comillas dobles "", comillas simples '' y comillas invertidas `` en la línea de comandos?


43

A menudo veo tutoriales en la web o publicaciones en este sitio que hacen un uso intensivo de los siguientes caracteres en la línea de comandos. A menudo parece que se usan con fines bastante similares. ¿Cuáles son las diferencias entre ellos cuando se usan en la línea de comandos o para la programación de shell? ¿Para qué uso cuál de ellos?

" " double quotes

' ' single quotes

` ` backticks

Respuestas:


43

Por el bien de ejemplo, considere que la variable foocontiene uname( foo=uname).

  • echo "$foo"salidas uname, sustituyendo variables en texto.
    • Para un $carácter literal entre "comillas, use \$; para un literal ", use \".
  • echo '$foo'salidas $foo, la cadena exacta.
    • Incluso 'no se puede escapar como comillas \'internas '. Pero puedes usar 'foo'\''bar'.
  • echo `$foo`salidas Linux, ejecutando el contenido de la variable e echoimprimiéndola.

\siempre se trata literalmente cuando se incluye entre comillas simples, incluso si precede a a '. Después de una apertura ', la siguiente 'siempre se interpreta como la cita de cierre. Algo parecido a 'las comillas en una cadena entre comillas simples se puede lograr al finalizar las comillas, escapar 'individualmente y comenzar a citar nuevamente. Es decir, aunque \'no funciona entre los 'caracteres iniciales y finales , '\''sí. (Vea la corrección de Gilles en una de mis publicaciones cuando cometí el mismo error para más detalles.)
Eliah Kagan

11

Esto se explica muy bien en la sección correspondiente del manual de bash. Brevemente, cualquier cosa entre comillas simples se interpreta literalmente. Así por ejemplo:

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

Compare eso con las versiones no citadas:

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

Las comillas dobles permiten la expansión variable (también la expansión del historial y algunas otras cosas). Básicamente, los usa cuando se trata de algo que desea ver ampliado. Por ejemplo:

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

En otras palabras, las comillas simples protegen completamente una cadena del shell, mientras que las comillas dobles protegen algunas cosas (espacios, por ejemplo) pero permiten que las variables y los caracteres especiales se expandan / interpreten correctamente.


1
¿No está seguro si el OP se cambió después del hecho, pero esta respuesta no menciona los backticks?
Alexander Mills

5

Las comillas simples ( '') se utilizan para preservar el valor literal de cada carácter encerrado dentro de las comillas.

Usando comillas dobles ( ""), se conserva el valor literal de todos los caracteres encerrados, excepto el signo de dólar ( $), las comillas (comillas simples hacia atrás ``) y la barra invertida ( \).

Cuando se incluye dentro de back-ticks ( ``), el shell interpreta algo que significa "la salida del comando dentro de los back-ticks". Esto se conoce como "sustitución de comando", ya que la salida del comando se sustituye por el comando en sí.

referencias:


3
echo '$HOME' is "$HOME"

Las comillas simples evitan la expansión variable, mientras que las comillas dobles lo permiten.


2

Solo estoy hablando en general pero:

""- Se utiliza para procesar cierta información dentro de ellos antes de la salida. (Como en PHP).

  • Por ejemplo: name=NESS; echo "Hello my name is $name"generará:Hello my name is NESS

''- Se usa para mostrar la salida tal como es. (También como en PHP).

  • Usando el ejemplo anterior, generará Hello my name is $name

Entonces, la diferencia entre comillas dobles y simples es que las comillas dobles procesan la variable y muestran el valor, mientras que las comillas simples muestran el nombre de la variable sin procesamiento.

`` - Se utiliza para citar comandos que luego se asignan a otra variable.


1

Las comillas simples encierran un valor que debe tomarse literalmente: se suprimen todos los tipos de expansión. Por lo general se utiliza si el valor incluye o puede incluir espacios en blanco (espacio, tabulador, nueva línea), o caracteres especiales ( $, \, `) que el usuario no desea ser ampliado / especialmente tratado por la cáscara.

Las comillas dobles encierran un valor que tendrá variables y se realizará el reemplazo de caracteres. Se requiere cuando la salida puede contener espacios en blanco y debe asignarse como un valor único.

Las comillas posteriores encierran un comando, cuyos resultados se desean como valor. Conchas más nuevas permiten el uso de $(...)en lugar de `...`. Prefiero el método más nuevo.

El siguiente código puede ayudar a comprender lo que está sucediendo.

CMD = 'ls.'
echo sq: $ CMD
establecer $ CMD
echo raw 1: $ 1
echo raw: $ *
establecer "$ CMD"
echo dq: $ 1
echo bq: `$ CMD`
echo nuevo: $ ($ CMD)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.