James a raison, mais pour ajouter un peu plus de données, je pense que la meilleure façon d'y penser est comme arguments à la commande: avez-vous l'intention que "bonjour" et "monde" soient deux arguments ou "bonjour le monde" en soit un argument.
De plus, les guillemets doubles permettent d'interpréter plus que de simples variables. Exactement ce qui dépend de votre shell, mais vérifiez l'expansion de l'historique, l'expansion de l'accolade et l'expansion du nom de fichier.
Il est également important de noter qu'il existe des cas où vous devez utiliser les deux types de guillemets dans un seul argument. N'oubliez pas que (par défaut) les arguments sont délimités par des espaces, donc si vous ne laissez aucun espace, vous spécifiez toujours le même argument.
Le mécanisme de guillemet simple de la plupart des shells ne permet aucun caractère spécial, ce qui signifie que toute instance d'un autre guillemet simple, même s'il semble être échappé, termine la citation. Il est donc impossible de passer une chaîne avec un guillemet simple à l'intérieur d'une chaîne entre guillemets simples, et vous devez utiliser des guillemets doubles. Cela peut être pénible lorsque vous voulez passer un argument qui contient des guillemets simples et quelque chose qui serait interprété, mais vous ne voulez pas l'être. Par exemple, si vous vouliez passer la chaîne littérale "" $ VAR "est une variable", vous devez le faire de cette façon:
"'"'$VAR'"' is a variable"
C'est en fait une concaténation de trois chaînes échappées par des guillemets:
"'"
'$VAR'
"' is a variable"
ou, sans les guillemets:
'
$VAR
' is a variable
En fait, avec la plupart des coquilles, vous pouvez également le faire de cette façon:
"'\$VAR' is a variable"
où la barre oblique inverse (" \
") indique au shell d'accepter littéralement le caractère suivant et de ne pas le développer.
Mais il y a des cas où vous finissez par devoir le faire de manière concaténée à plusieurs chaînes, pas que je puisse en fait trouver un exemple pour le moment.