Я знаю, что есть несколько способов вручную избежать вложенных кавычек одного и того же вида.
Пример
echo 'this single quote '"'"' is escaped.'
Есть еще несколько способов сделать это, которые уже хорошо описаны в StackOverflow, но я пытаюсь взять эту концепцию и применить ее как функцию, чтобы избежать всего. Несколько раз мне не удавалось найти универсальное решение для экранирования для Bash (например, я искал библиотеку строк, которая включает экранирование без удачи).
Вот одна из моих попыток:
function quote() {
printf '%s' "'${1//\'/\'"\'"\'}'"
}
Идея состоит в том, что все одинарные кавычки будут заменены на упомянутый выше escape-стиль '"'"'
. Я также попытался сделать то же самое, используя стиль escape, например: \'
. Не повезло.
Каждый ответ на эту тему в моем исследовании, с которым я сталкивался, звучит так, будто это невозможно, но я не из тех, кто принимает это за ответ. Для меня, если вы можете отобразить строку, подобную этой: 'test \' test'
, то она должна быть также выражена в функции, в которой обратные слэши или иным образом добавляются для экранирования символов.
echo '~!@#$%^&*()_+`1234567890-=qwertyuiop[]\QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?zxcvbnm,./'
Как показано выше, ни одну из основных клавиш на традиционной английской клавиатуре не нужно экранировать, но это требует вложенности кавычек того же типа внутри себя.
Может кто-нибудь пролить свет на это? Я упускаю что-то очевидное или это действительно так сложно?