Джеймс прав, но, добавив еще несколько данных, я думаю, что лучший способ думать об этом - это аргументы команды: вы намерены «привет» и «мир», чтобы быть двумя аргументами, или «привет мир», чтобы быть одним аргумент.
Кроме того, двойные кавычки позволяют интерпретировать не только переменные. Именно то, что зависит от вашей оболочки, но проверьте расширение истории, расширение скобок и расширение имени файла.
Также важно отметить, что в некоторых случаях вам нужно использовать оба типа кавычек в одном аргументе. Помните, что (по умолчанию) аргументы разделяются пробелами, поэтому, если вы не оставляете пробел, вы все равно указываете тот же аргумент.
Механизм одинарных кавычек большинства оболочек не допускает никаких специальных символов, а это означает, что любой экземпляр другой одинарной кавычки, даже если она кажется экранированной, завершает кавычку. Поэтому невозможно передать строку с одинарной кавычкой внутри одинарной кавычки, и вы должны использовать двойные кавычки. Это может быть больно, когда вы хотите передать аргумент, который содержит одинарные кавычки и что-то, что будет интерпретировано, но вы не хотите, чтобы это было. Например, если вы хотите передать буквальную строку «$ VAR - это переменная», вы должны сделать это следующим образом:
"'"'$VAR'"' is a variable"
На самом деле это конкатенация трех кавычек:
"'"
'$VAR'
"' is a variable"
или с удаленными кавычками:
'
$VAR
' is a variable
На самом деле, с большинством оболочек, вы также можете сделать это следующим образом:
"'\$VAR' is a variable"
где обратная косая черта (" \
") говорит оболочке принять буквально следующий символ и не делать никаких расширений.
Но есть некоторые случаи, когда вам приходится делать это путем объединения нескольких строк, а не то, чтобы я мог привести пример прямо сейчас.