
Я попытался создать текстовый файл в скрипте bash.
Команда echo
занимает несколько строк и содержит несколько двойных кавычек "".
#!/bin/bash
echo "blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla" > /root/bin/bla
В команде присутствует много двойных кавычек "", echo
что нежелательно.
И я сделал
#!/bin/bash
echo 'blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla' > /root/bin/bla
Мне было интересно, есть ли разница между двойными кавычками " и одинарными кавычками '
Какой из них имеет более высокий приоритет? Просто потому, что они визуально разные?
решение1
3.1.2.2 Одинарные кавычки
Заключение символов в одинарные кавычки (''') сохраняет буквальное значение каждого символа внутри кавычек. Одинарная кавычка не может находиться между одинарными кавычками, даже если ей предшествует обратная косая черта.
3.1.2.3 Двойные кавычки
Заключение символов в двойные кавычки ('"') сохраняет буквальное значение всех символов внутри кавычек, за исключением '$', '`', '\' и, когда включено расширение истории, '!'. Символы '$' и '`' сохраняют свое особое значение внутри двойных кавычек (см. Расширения оболочки). Обратная косая черта сохраняет свое особое значение только тогда, когда за ней следует один из следующих символов: '$', '`', '"', '\' или новая строка. Внутри двойных кавычек обратные косые черты, за которыми следует один из этих символов, удаляются. Обратные косые черты, предшествующие символам без особого значения, остаются неизменными. Двойную кавычку можно заключить в двойные кавычки, поставив перед ней обратную косую черту. Если включено, расширение истории будет выполнено, если только '!', появляющийся в двойных кавычках, не будет экранирован с помощью обратной косой черты. Обратная косая черта, предшествующая '!', не удаляется. Специальные параметры «*» и «@» имеют особое значение, если они заключены в двойные кавычки (см. Расширение параметров оболочки).
Вот несколько практических демонстраций вышесказанного:
- Двойные кавычки позволяют оценивать расширения параметров, а одинарные — нет:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
- Двойные кавычки позволяют вычислять экранирование с помощью обратной косой черты, а одинарные — нет:
$ echo "\\"
\
$ echo '\\'
\\
- Двойные кавычки позволяют выполнять подстановку команд (
$(
,`
), а одинарные — нет:
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)