Наличие одной кавычки внутри одной строки в кавычках - PullRequest
0 голосов
/ 08 апреля 2020

Мой вопрос нацелен на Zsh, но из того, что я пробовал, похоже, что оно применимо и к оболочке POSIX и bash:

Я хочу написать строку, содержащую буквальные $ символы (нет предназначена интерполяция) и одинарные кавычки. Поскольку в главе о цитировании на справочной странице Zsh говорится о строках в одинарных кавычках:

Литеральный символ ' может быть включен в строку с помощью клавиши \ 'escape.

Я пытался что-то вроде этого (в интерактивном zsh, прежде чем делать это в сценарии):

echo 'a$b\'c'

Я ожидал, что это выведет a$b'c, но zsh говорит, что у меня есть открытая цитата.

Я знаю, что могу использовать в качестве обходного пути

echo 'a$'"b'C"

, но я все еще хотел бы знать, почему моя первоначальная попытка не удалась.

1 Ответ

0 голосов
/ 08 апреля 2020

Проблема заключалась в моей интерпретации man-страницы, и я должен винить себя в том, что я исключил из своей цитаты страницы одну часть, которая, по моему мнению, не важна, но на самом деле имеет отношение к этому случаю. Здесь снова полное предложение страницы руководства:

Строка, заключенная между '$' 'и' '', обрабатывается так же, как строковые аргументы встроенной функции печати. и полученная строка считается полностью заключенной в кавычки. Буквенный символ '' 'может быть включен в строку с помощью экранирования' \ ''.

Так как Zsh имеет два способа записи строки в одинарных кавычках (один, где кавычка, как в bash, начинается с ' и где начинается с $'), я понял между ... и частью, которую он имел в виду "в $' и в ' в кавычках, экранирование \' работает.

Эта интерпретация неверна. Что означает страница руководства, так это то, что строка в кавычках, которая начинается с $' и заканчивается с ', можно использовать этот escape.

Следовательно, мой пример может быть записан как

 echo $'a$b\'c'
...