¿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.