Различия между doublequotes "", singlequotes '' и backticks `` на командной строке?

Я часто вижу учебные пособия в Интернете или сообщения на этом сайте, которые сильно используют следующие символы в командной строке. Часто кажется, что они используются для подобных целей. Каковы различия между ними при использовании в командной строке или для программирования оболочки? С какой целью я использую их?

" " double quotes

' ' single quotes

` ` backticks
38 голосов | спросил NES 4 Jpm1000000pmTue, 04 Jan 2011 19:24:12 +030011 2011, 19:24:12

6 ответов


41

Для примера рассмотрим, что переменная foo содержит uname (foo=uname).

  • echo "$foo" выходы uname, заменяя переменные в тексте ,
    • Для символа $ символ внутри ", используйте \$; для буквенного ", используйте \".
  • echo '$foo' выводит $foo, точную строку.
    • Даже ' не может быть экранирован как \' внутри '. Но вы можете использовать 'foo'\''bar'.
  • echo `$foo` выходы Linux, выполнение содержимого переменная и echo печать.
ответил shellholic 4 Jpm1000000pmTue, 04 Jan 2011 19:53:45 +030011 2011, 19:53:45
11

Это объясняется очень хорошо в соответствующем разделе руководства по 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

Другими словами, одинарные кавычки полностью защищают строку от оболочки, а двойные кавычки защищают объекты some (например, пробелы), но позволяют правильно или правильно интерпретировать переменные и специальные символы.

ответил terdon 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 16 Sep 2014 22:31:13 +0400 2014, 22:31:13
4

Одиночные кавычки ('') используются для сохранения литерального значения каждого символа, заключенного в кавычки.

Использование двойных кавычек (""), буквальное значение всех заключенных символов сохраняется, за исключением знака доллара ($), backticks (обратные одинарные кавычки, `` ) и обратная косая черта (\).

При заключении внутри back-ticks (``) оболочка интерпретирует что-то, что означает «вывод команды внутри back- тики «. Это называется «подстановкой команд», так как вывод команды заменяется самой командой.

ссылки:

ответил aneeshep 4 Jpm1000000pmTue, 04 Jan 2011 19:28:46 +030011 2011, 19:28:46
3
echo '$HOME' is "$HOME"

Одиночные кавычки предотвращают расширение переменной, в то время как двойные кавычки позволяют это.

ответил ubfan1 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 16 Sep 2014 22:25:30 +0400 2014, 22:25:30
2

Просто говорю вообще, но:

"" - используется для обработки некоторой информации внутри них перед выходом. (Как в PHP.)

  • Например: name=NESS; echo "Hello my name is $name" будет выводиться: Hello my name is NESS

'' - Используется для отображения вывода как есть. (Также как в PHP.)

  • Используя приведенный выше пример, он выведет Hello my name is $name

Таким образом, разница между двойными и одинарными кавычками заключается в том, что двойные кавычки обрабатывают переменную и показывают значение, в то время как одинарные кавычки показывают имя переменной без обработки.

`` - Используется для цитирования команд, которые позже назначаются другой переменной.

ответил Luis Alvarado 4 Jpm1000000pmTue, 04 Jan 2011 19:32:42 +030011 2011, 19:32:42
0

Одиночные кавычки включают значение, которое должно быть принято буквально: все типы расширений подавляются. Обычно используется, если значение включает или может включать пробел (пробел, табуляцию, новую строку) или специальные символы ($, \, `), который пользователь не хочет быть расширенным /обработанным специально оболочкой.

Двойные кавычки включают значение, которое будет иметь переменные, и замену символа. Требуется, когда вывод может содержать пробелы и должен быть назначен как одно значение.

Задние кавычки заключают в себе команду, результаты которой требуются как значение. Новые оболочки позволяют использовать $(...) вместо `...`

Следующий код может помочь понять, что происходит.

CMD = 'ls.'
эхо sq: $ CMD
установить $ CMD
echo raw 1: $ 1
echo raw: $ *
установить "$ CMD"
echo dq: $ 1
echo bq: `$ CMD`
echo new: $ ($ CMD)
ответил BillThor 4 Jpm1000000pmTue, 04 Jan 2011 20:42:15 +030011 2011, 20:42:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132