Различия между двойными кавычками & ldquo; & rdquo ;, одинарные кавычки '' и обратные кавычки `` в командной строке?

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

" " double quotes

' ' single quotes

` ` backticks
46
задан 18 June 2018 в 01:12

6 ответов

Ради примера рассмотрите ту переменную foo содержит uname (foo=uname).

  • echo "$foo" выводы uname, замена переменными в тексте.
    • Для литерала $ символ внутри " кавычки, использовать \$; для литерала ", использовать \".
  • echo '$foo' выводы $foo, точная строка.
    • Даже ' не может быть оставлен как \' внутри ' кавычки. Но можно использовать 'foo'\''bar'.
  • echo `$foo` выводы Linux, выполнение содержания переменной и echo печать его.
43
ответ дан 18 June 2018 в 01:12
echo '$HOME' is "$HOME"

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

0
ответ дан 18 June 2018 в 01:12

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

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

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

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

CMD='ls .'
echo sq: $CMD
set $CMD
echo raw 1: $1
echo raw: $*
set "$CMD"
echo dq: $1
echo bq: `$CMD`
echo new: $($CMD)
0
ответ дан 18 June 2018 в 01:12

Я просто говорю в целом, но:

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

  • Например: name=NESS; echo "Hello my name is $name" выведет: Hello my name is NESS

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

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

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

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

0
ответ дан 18 June 2018 в 01:12

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

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

0
ответ дан 18 June 2018 в 01:12

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

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

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

ссылки:

0
ответ дан 18 June 2018 в 01:12

Другие вопросы по тегам:

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