Diferencia entre 'y "en la línea de command (bash)?

Solía ​​usar '' y "" (comillas simples y dobles) intercambiablemente en la línea de command, pero recientemente noté que '$HOME/some/dir' no está expandido, mientras que "$HOME/some/dir" es. Busqué un poco y descubrí que "" permite cierta protección de los caracteres especiales, mientras que '' permite una protección total. Entonces, ¿qué otros personajes están protegidos por '' y no "" ?

EDITAR: ¿Cuáles son las situaciones prácticas en las que estas diferencias pueden ser significativas?

Eche un vistazo a la página del hombre bash. Hay una sección completa sobre las citas. Debido a que esta licencia bajo el GFDL, que no es compatible con la licencia CC-BY-SA utilizada aquí, no voy a citar todo, pero realmente la lectura es la respuesta más definitiva .

En resumen, las comillas simples detienen toda interpretación: la cadena se representa literalmente. Las comillas dobles dejan $ (signo de dólar), `(comillas) como especiales, y \ (barra invertida) como especiales cuando están seguidos por ciertos otros caracteres. Y ! se tratarán especialmente si la function de expansión de historial está habilitada (que es por defecto).

En el uso práctico, el $ es el gran problema, ya que a menudo uno puede desear las diversas expansiones que permite (variables y más), al mismo time que evita que el shell entorpezca la mayor parte de la command-line.

Mientras que las comillas simples conservan el valor literal de todos los caracteres que encierran,

las comillas dobles difieren en que no conservan el valor literal del signo de dólar, $, las marcas de retroceso, -, y la barra invertida,.

Cuando se incluyen entre comillas dobles, el signo de dólar y las marcas de retroceso conservan su significado especial, y el significado especial del carácter de barra diagonal inversa solo se conserva cuando precede a un signo de dólar, retroceso, doble cita, barra inclinada invertida o nueva línea.

Ejemplo:

 [user@localhost~]$ echo '$HOME' $HOME [user@localhost~]$ echo '`pwd`' `pwd` [user@localhost~]$ echo '"Hello world"' "Hello world" [user@localhost~]$ echo "$HOME" /home/user [user@localhost~]$ echo "`pwd`" /home/user [user@localhost~]$ echo ""Hello world"" Hello world [user@localhost~]$ echo "\$HOME" $HOME [user@localhost~]$ echo "\`pwd\`" `pwd` [user@localhost~]$ echo "\"Hello ,world\"" "Hello, world"