У меня проблемы с экранированием символов в bash. Я хотел бы избежать одинарных и двойных кавычек при выполнении команды под другим пользователем. Для целей этого вопроса, скажем, я хочу отобразить следующее на экране:
'single quote phrase' "double quote phrase"
Как я могу избежать всех специальных символов, если мне также нужно переключиться на другого пользователя:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Конечно, это не дает правильного результата.
shell
quoting
escape-characters
m33lky
источник
источник
bash
на пути к тому, чтобы заставить меня злиться.Ответы:
Вы можете использовать следующий строковый литеральный синтаксис:
Из
man bash
источник
В оболочке POSIX, предполагая, что в вашей строке нет расширения переменной, команды или истории, а также нет новой строки, выполните следующие основные предписания:
Чтобы заключить в обобщенную строку одинарные кавычки, выполните следующие действия:
Замените любую последовательность символов, не входящих в одинарные кавычки, одинаковой последовательностью с добавленными начальными и конечными одинарными кавычками:
'aaa' ==> ''aaa''
Избегайте обратной косой черты каждый существующий символ одинарной кавычки:
' ==> \'
в частности,
''aaa'' ==> \''aaa'\'
Чтобы заключить в обобщенную строку двойные кавычки, выполните следующие действия:
Добавьте ведущие и конечные двойные кавычки:
aaa ==> "aaa"
Escape с обратной косой чертой каждый символ двойной кавычки и каждый символ обратной косой черты:
" ==> \", \ ==> \\
Пара примеров:
так что ваш пример может быть расширен следующим:
источник
Простой пример экранирования кавычек в оболочке:
Это сделано, заканчивая уже открытый one (
'
), помещая экранированный one (\'
), затем открывая другой ('
).В качестве альтернативы:
Это делается путем завершения уже открытой one (
'
), размещения цитаты в другой quote ("'"
), а затем открытия другой ('
).Связанный: Как избежать одиночных кавычек в одиночных кавычках? на стеке потока
источник
Принятый ответ работает для простого (одноуровневого) цитирования:
Чтобы команда работала, вам нужно дважды заключить в кавычки.
Этот скрипт может сделать всю работу:
Выполните скрипт, чтобы получить:
Первая строка работает для простого эха:
Вторая строка будет работать для команды с двойными кавычками:
источник
эхо "я студент" не работает. Но работает следующее:
echo $ 'Я студент' Со страницы руководства bash:
Одиночная кавычка может отсутствовать между одинарными кавычками, даже если ей предшествует обратный слеш .... Слова вида $ 'string' обрабатываются специально. Слово расширяется до строки, символы с обратной косой чертой заменяются в соответствии со стандартом ANSI C.
источник