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.
\
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.)