Асимметричный синтаксис кавычек в оболочках

Я заметил тенденцию в оболочках Unix и других языках, таких как LaTeX, HTML, устранять симметричный синтаксис включения.

Под симметричным синтаксисом включения я подразумеваю, что открывающий и закрывающий знаки одинаковы, например, одинарная кавычка оболочки ', двойная кавычка и обратная кавычка `, LaTeX $.

Рекомендуется заменить симметричный включающий синтаксис на асимметричный включающий синтаксис, например, писать в оболочке $(ls), а не `ls`, в LaTeX \(2+2\), а не $2+2$.

Причинами этого изменения являются простота интерпретации для человека-читателя или компьютерной программы (парсера) и проблема вложенности.

Обходной путь для вложенных кавычек обычно заключается в использовании двойных кавычек на одном уровне и одинарных кавычек на другом, но это не работает с тремя уровнями, например echo "'"a"'", а также одинарные и двойные кавычки различаются в отношении подстановки параметров, поэтому вы можете' t использовать подстановку параметров на обоих уровнях.

Есть ли способ заменить одинарные и двойные кавычки оболочки Unix асимметричными конструкциями, допускающими вложение?

Я нашел $'' как асимметричную альтернативу одинарным кавычкам, но что за двойные кавычки?

($ не работает для этого в zsh.)


person Pierre ALBARÈDE    schedule 23.04.2021    source источник
comment
Is there a way... вы хотите получить ответ вроде: написать свою собственную оболочку, которая делает это? $"" does not work for this in zsh Нет, $"" не для этого, а для перевода сообщений.   -  person KamilCuk    schedule 23.04.2021
comment
Я предпочел бы найти что-то существующее в любой из распространенных оболочек, таких как zsh, bash, или убедиться, что то, что я ищу, бесполезно.   -  person Pierre ALBARÈDE    schedule 23.04.2021


Ответы (1)


Есть ли способ заменить одинарные и двойные кавычки оболочки Unix асимметричными конструкциями, допускающими вложение?

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

Я нашел $'' как асимметричную альтернативу

$'' – это строка ANSI C в кавычках, а $"" – для перевода на местные языки. Это не альтернатива цитированию.

person KamilCuk    schedule 24.04.2021
comment
Французские гильеметы «» были бы великолепны, но они не соответствуют набору ASCII. - person Pierre ALBARÈDE; 25.04.2021