Общее правило состоит в том, что двойные кавычки по-прежнему допускают расширение переменных внутри кавычек, а одинарные кавычки - нет. Продолжай читать.
Цитаты с простым текстом
Если вы просто прикладываете несколько слов текста, это не имеет значения, какой из них вы используете, так как они будут работать одинаково. Например, эти две команды будут создавать каталог с именем Test Directory:
mkdir 'Test Directory' mkdir 'Test Directory'
Более опытные типы, вероятно, заметят, что вы также можете использовать mkdir Test Directory, если хотите.
Расширение переменной оболочки
Разница между одиночными и двойными кавычками становится более важной, когда вы имеете дело с переменными в командной строке - по умолчанию bash собирается расширить переменную типа $ test в полную строку. Во-первых, мы назначим переменную:
test='This is a test'
Теперь вы можете использовать эту переменную в командной строке, как это, которая должна просто выводить Это тест на консоль:
echo $test
Здесь разница между двойными и одинарными кавычками становится более понятной - при использовании одинарных кавычек переменные не будут расширяться. Например, если вы запустите эту команду:
echo '$test'
Вы не увидите ничего, кроме «$ test» в командной строке при использовании одинарных кавычек, но он будет выводиться правильно, когда вы используете двойные кавычки:
То же самое работает, когда вы используете символ ``, чтобы развернуть команду в командной строке. Например, скажем, вы хотели использовать PWD команда из другой команды - вы используете обратные сигналы, чтобы сообщить оболочке о ее расширении:
echo `pwd`/test
Если вы были в своей домашней папке, вы увидите вывод, который выглядит так:
/home/geek/test
Например, вы находитесь в папке с пробелом в пути и хотите использовать команду ln для создания символической ссылки на файл в текущем каталоге. Обычно вам нужно указать полный путь при использовании команды ln, поэтому гораздо проще использовать `pwd` для сохранения ввода.
Посмотрите, что происходит, когда вы пытаетесь использовать команду без включения в кавычки:
ln –s `pwd`/test /home/geek/linkedname
ln –s '`pwd`/filename' /some/other/path
Для более конкретного примера предположим, что у нас есть структура папок, подобная этому примеру, где у всех имен файлов есть пробелы в них:
for f in *.zip;do unzip $f;done
К сожалению! Похоже, это не сработало.
for f in *.zip;do unzip '$f';done
Теперь каждый раз, когда команда команды проходит цикл, она фактически запускает команду, подобную этой:
unzip 'test 1.zip'
Конечно, он будет циклически проходить и запускать аналогичную команду для каждого файла в каталоге.
Давайте рассмотрим
Теперь, когда мы рассмотрели примеры, мы просто быстро рассмотрим, если вы его пропустили:
Двойные кавычки
- Используйте, когда вы хотите заключить переменные или использовать расширение оболочки внутри строки.
- Все символы внутри интерпретируются как обычные символы, кроме $ или `, которые будут расширены в оболочке.
Одиночные цитаты
Все символы в одинарных кавычках интерпретируются как строковый символ.
И таким образом заканчивается урок цитат. Используйте их с умом.