Відмінності між подвійними лапочками "", одиночними цитатами "" і "backticks" в командному рядку?


43

Я часто бачу навчальні посібники в Інтернеті або публікації на цьому веб-сайті, які широко використовують наступні символи в командному рядку. Часто здається, що їх використовують для досить подібних цілей. Які відмінності між ними використовуються в командному рядку або для програмування оболонки? З якою метою я використовую, який із них?

" " double quotes

' ' single quotes

` ` backticks

Відповіді:


43

Для прикладу врахуйте, що змінна fooмістить uname( foo=uname).

  • echo "$foo"виводить uname, замінюючи змінні в тексті.
    • Для буквального $символу всередині "лапок використовуйте \$; для буквального ", використовувати \".
  • echo '$foo'Виводи $foo, точний рядок.
    • Навіть 'неможливо уникнути, як \'всередині 'цитат. Але можна використовувати 'foo'\''bar'.
  • echo `$foo`виводить Linux, виконуючи вміст змінної та echoдрукуючи її.

\завжди трактується буквально, коли додається до одиничних лапок, навіть якщо це передує a '. Після відкриття 'наступне 'завжди трактується як кінцева цитата. Щось на кшталт цитування 'в одноцитуваному рядку можна досягти, припинивши цитування, закрившись 'окремо і почавши цитувати знову. Тобто, хоча \'не працює між відкриттям і закриттям 'символів, '\''це робить. (Див Жиля «сек поправки до одного з моїх постів , коли я зробив ту ж помилку для деталей.)
Eliah Каган

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

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


1
не впевнений, чи було змінено ОП після факту, але ця відповідь не згадує про зворотній зв'язок?
Олександр Міллс

5

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

Використовуючи подвійні лапки ( ""), буквальне значення всіх вкладених символів зберігається, крім знака долара ( $), зворотних посилань (зворотних одинарних лапок, ``) та зворотної косої риси ( \).

Якщо укладена всередині back-ticks ( ``), оболонка інтерпретує щось, що означає "вихід команди зсередини back-ticks". Це називається "підміна команди", оскільки вихід команди замінюється на саму команду.

посилання:


3
echo '$HOME' is "$HOME"

Одиничні лапки запобігають розширенню змінної, тоді як подвійні лапки дозволяють.


2

Я просто говорю загалом, але:

""- Використовується для обробки деякої інформації всередині них перед виведенням. (Як у PHP.)

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

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

  • Використовуючи приклад вище, він виведе Hello my name is $name

Отже, різниця між подвійними та одинарними лапками полягає в тому, що подвійні лапки обробляють змінну і показують значення, тоді як одинарні лапки показують ім'я змінної без обробки.

`` - Використовується для цитування команд, які згодом присвоюються іншій змінній.


1

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

Подвійні лапки додають значення, яке матиме змінні, та заміну символів. Необхідно, коли вихід може містити пробіл, і повинен бути призначений як одне значення.

Назад цитати додають команду, результати якої потрібно шукати як значення. Більш нові снаряди дозволяють використовувати $(...)замість `...`. Я віддаю перевагу більш новий метод.

Наступний код може допомогти зрозуміти, що відбувається.

CMD = 'ls.'
echo sq: $ CMD
встановити $ CMD
відлуння сирої 1: 1 долар
ехо-сире: $ *
встановити "$ CMD"
echo dq: $ 1
echo bq: `$ CMD`
відлуння нове: $ ($ CMD)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.