Разница между одинарными и двойными кавычками в Bash



в bash, каковы различия между одинарными кавычками ('') и двойные кавычки ("")?

925   5  

5 ответов:

одинарные кавычки ничего не интерполируют, но двойные кавычки будут. Например: переменные, обратные ходы, некоторые \ побег и т. д.

пример:

$ echo "$(echo "upg")"
upg
$ echo '$(echo "upg")'
$(echo "upg")

в руководстве Bash говорится следующее:

3.1.2.2 Одинарные Кавычки

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

3.1.2.3 Двойные Кавычки

содержащие символы в двойные кавычки (") сохраняет буквенное значение всех символов в кавычках, за исключением $,`,\, и, когда расширение истории включено,!. Персонажи $ и ` сохраняют свое особое значение в двойных кавычках (см. Оболочки Расширения). Обратная косая черта сохраняет свою особенность значение только тогда, когда за ним следует один из следующих символов:$,`,",\, или символ новой строки. В двойных кавычках удаляются обратные косые черты, за которыми следует один из этих символов. Обратные косые черты предшествующих символов без специального значения остаются неизмененными. Двойная кавычка может быть заключена в двойные кавычки, предваряя ее обратной косой чертой. Если включено, расширение истории будет выполняться, если ! отображение в двойных кавычках экранируется с помощью обратной косой черты. Этот обратная косая черта, предшествующая ! не удаляется.

специальные параметры * и @ имеют особое значение, когда в двойные кавычки (см. Расширение Параметров Оболочки).

Если вы имеете в виду то, что происходит, когда вы Эхо что-то, одинарные кавычки будут буквально Эхо то, что у вас есть между ними, в то время как двойные кавычки будут оценивать переменные между ними и выводить значение переменной.

например,

#!/bin/sh
MYVAR=sometext
echo "double quotes gives you $MYVAR"
echo 'single quotes gives you $MYVAR'

даст это:

double quotes gives you sometext
single quotes gives you $MYVAR

The принято отвечать это здорово. Я делаю таблицу, которая помогает в быстром понимании темы. Объяснение включает в себя простую переменную a а также индексированный массив arr.

если мы ставим

a=apple      # a simple variable
arr=(apple)  # an indexed array with a single element

а то echo выражение во втором столбце, мы получим результат / поведение, показанное в третьем столбце. Четвертый столбец объясняет поведение.

 # | Expression  | Result      | Comments
---+-------------+-------------+--------------------------------------------------------------------
 1 | "$a"        | apple       | variables are expanded inside ""
 2 | '$a'        | $a          | variables are not expanded inside ''
 3 | "'$a'"      | 'apple'     | '' has no special meaning inside ""
 4 | '"$a"'      | "$a"        | "" is treated literally inside ''
 5 | '\''        | **invalid** | can not escape a ' within ''; use "'" or $'\'' (ANSI-C quoting)
 6 | "red$arocks"| red         | $arocks does not expand $a; use ${a}rocks to preserve $a
 7 | "redapple$" | redapple$   | $ followed by no variable name evaluates to $
 8 | '\"'        | \"          | \ has no special meaning inside ''
 9 | "\'"        | '           | \' is interpreted inside ""
10 | "\""        | "           | \" is interpreted inside ""
11 | "*"         | *           | glob does not work inside "" or ''
12 | "\t\n"      | \t\n        | \t and \n have no special meaning inside "" or ''; use ANSI-C quoting
13 | "`echo hi`" | hi          | `` and $() are evaluated inside ""
14 | '`echo hi`' | `echo hi`   | `` and $() are not evaluated inside ''
15 | '${arr[0]}' | ${arr[0]}   | array access not possible inside ''
16 | "${arr[0]}" | apple       | array access works inside ""
17 | $'$a\''     | $a'         | single quotes can be escaped inside ANSI-C quoting
18 | "$'\t'"     | $'\t'       | ANSI quoting is not interpreted inside ""
19 | '!cmd'      | !cmd        | history expansion character '!' is ignored inside ''
20 | "!cmd"      | cmd args    | expands to the most recent command matching "cmd"
---+-------------+-------------+--------------------------------------------------------------------

посмотреть также:

другие объяснили очень хорошо и просто хотят дать с простыми примерами.

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

$ echo 'All sorts of things are ignored in single quotes, like $ & * ; |.' 

он даст это:

All sorts of things are ignored in single quotes, like $ & * ; |.

единственное, что не может быть помещено в одинарные кавычки-это один цитата.

двойные кавычки действуйте аналогично одинарным кавычкам, за исключением двойных кавычек, которые все еще позволяют оболочке интерпретировать знаки доллара, обратные кавычки и обратные косые черты. Уже известно, что обратные косые черты не позволяют интерпретировать один специальный символ. Это может быть полезно в двойных кавычках, если знак доллара должен использоваться в качестве текста, а не для переменной. Он также позволяет экранировать двойные кавычки, чтобы они не интерпретировались как конец кавычки строка.

$ echo "Here's how we can use single ' and double \" quotes within double quotes"

он даст это:

Here's how we can use single ' and double " quotes within double quotes

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

$ echo "The current Oracle SID is $ORACLE_SID"

он даст это:

The current Oracle SID is test

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

$ today=`date '+%A, %B %d, %Y'`
$ echo $today 

он даст это:

Monday, September 28, 2015 

существует четкое различие между использованием ' ' и " ".

, когда ' ' используется вокруг чего угодно, нет никакого" преобразования или перевода " сделано. Он напечатан как есть.

С " ", что бы он ни окружал," переводится или трансформируется " в его значение.

под переводом / преобразованием я подразумеваю следующее: Все, что находится в одинарных кавычках, не будет" переведено " на их значения. Они будут приняты такими, какие они есть внутри кавычек. Пример: a=23, потом echo '$a' будет $a на стандартный вывод. Тогда как echo "$a" будет 23 на стандартный вывод.

Comments

    Ничего не найдено.