Различия между двойными кавычками " ", одинарными кавычками ' ' и обратными кавычками ` ` в командной строке?
Я часто вижу учебные материалы в Интернете или сообщения на этом сайте, в которых интенсивно используются следующие символы в командной строке. Часто кажется, что они используются для довольно похожих целей. Каковы различия между ними при использовании в командной строке или для программирования оболочки? Для каких целей я использую какие из них?
" " double quotes
' ' single quotes
` ` backticks
6 ответов
Для примера рассмотрим эту переменную foo
содержит uname
(foo=uname
).
echo "$foo"
выходыuname
, подставляя переменные в текст.- Для буквального
$
персонаж внутри"
цитаты, используйте\$
; для буквального"
использовать\"
,
- Для буквального
echo '$foo'
выходы$foo
, точная строка.- Четное
'
не может быть сбежал как\'
внутри'
цитаты. Но вы можете использовать'foo'\''bar'
,
- Четное
echo `$foo`
выходыLinux
, выполняя содержимое переменной иecho
печатать это.
Это очень хорошо объясняется в соответствующем разделе руководства по bash. Вкратце, все в одинарных кавычках интерпретируется буквально. Так, например:
$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}
Сравните это с версиями без кавычек:
$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3
Двойные кавычки позволяют расширение переменной (также расширение истории и некоторые другие вещи). По сути, вы используете их, когда имеете дело с чем-то, что вы хотите видеть расширенным. Например:
$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash
Другими словами, одинарные кавычки полностью защищают строку от оболочки, тогда как двойные кавычки защищают некоторые вещи (например, пробелы), но позволяют переменным и специальным символам правильно расширяться / интерпретироваться.
Одинарные кавычки (''
) используются для сохранения буквального значения каждого символа, заключенного в кавычки.
Использование двойных кавычек (""
), буквенное значение всех вложенных символов сохраняется, кроме знака доллара ($
), обратные кавычки (обратные одинарные кавычки, ``
) и обратный слеш (\
).
Когда заключено внутри бэк-тиков (``
) оболочка что-то интерпретирует как "вывод команды внутри обратных тиков". Это называется "подстановка команды", поскольку вывод команды заменяется самой командой.
Рекомендации:
echo '$HOME' is "$HOME"
Одинарные кавычки предотвращают расширение переменной, в то время как двойные кавычки позволяют это.
Просто говорю в общем но:
""
- Используется для обработки некоторой информации внутри них перед выводом. (Как в PHP.)
- Например:
name=NESS; echo "Hello my name is $name"
будет выводить:Hello my name is NESS
''
- Используется, чтобы показать вывод как есть. (Также как в PHP.)
- Используя приведенный выше пример, он выведет
Hello my name is $name
Таким образом, разница между двойными и одинарными кавычками заключается в том, что двойные кавычки обрабатывают переменную и показывают значение, тогда как одинарные кавычки показывают имя переменной без обработки.
``
- Используется для цитирования команд, которые позже назначаются другой переменной.
Одинарные кавычки заключают в себе значение, которое следует понимать буквально: все типы раскрытия исключаются. Обычно используется, если значение включает в себя или может включать пробелы (пробел, табуляция, новая строка) или специальные символы ($
, \
, `
) что пользователь не хочет быть расширенным / обработанным специально оболочкой.
Двойные кавычки заключают в себе значение, которое будет иметь переменные и замену символов. Требуется, когда выходные данные могут содержать пробелы, и должны быть назначены как одно значение.
Обратные кавычки заключают в себе команду, результаты которой требуются в качестве значения. Новые оболочки позволяют использовать $(...)
на месте `...`
, Я предпочитаю более новый метод.
Следующий код может помочь понять, что происходит.
CMD = 'ls.' echo sq: $CMD установить $CMD эхо необработанное 1: $1 echo raw: $* установить "$CMD" echo dq: $1 echo bq: `$CMD` echo new: $($CMD)