Подтвердить что ты не робот

У Zsh или bash есть кавычки, которые удобны для текста на английском языке?

Если я использую одинарные кавычки, слова с апострофами ( "не надо" ) раздражают:

'Don'"'"'t do that'

Если я использую двойные кавычки, знаки доллара и восклицательные знаки разворачивают его:

"It cost like \$1000\!"

Есть ли другой способ цитирования, который я могу использовать?

изменить. Я также должен добавить, что я хотел бы передать эту строку непосредственно в качестве аргумента командной строки, а не хранить ее в переменной. Для этого я попытался, используя решение DigitalRoss,

$ echo "$(cat << \EOF 
Don't $worry be "happy".
EOF)"

но получите

dquote cmdsubst> 

после нажатия введите:/. Итак, на данный момент ZyX-предложение setopt rcquotes выглядит наиболее удобным.

4b9b3361

Ответ 1

С помощью zsh вы можете выполнять

setopt rcquotes

. Затем апострофы ASCII сбрасываются так:

echo 'Don''t'

. Или настройте свою раскладку, чтобы иметь возможность вводить апострофы UTF, у них нет проблем с какими-либо кавычками (в том числе и нет) в любой оболочке:

echo 'Don’t'

. Третий работает как для zsh, так и для bash:

echo $'Don\'t'

.

Ни первый, ни третий не могут сузить цитату одному символу, но они все еще менее подробные для недолговечных строк, а затем heredocs, предложенные выше. С помощью zsh вы можете сделать это, используя пользовательский виджет приемной линии, который заменит конструкты типа 'Don't' на 'Don'\''t'. Требуется довольно сложная магия регулярных выражений, которую я могу написать только в perl; и, вероятно, не самая лучшая идея, поскольку я не могу притворяться, что могу охватить все возможные случаи, прежде чем они ударят. В любом случае это не будет касаться каких-либо скриптов.

Ответ 2

Мне нравится направление Zsolt Botykai. Вот пример, который работает с любой оболочкой Posix. (Я также подтвердил, что он сохранил свою вставку в SO-сервер.)

$ read -r x << \EOF
Don't $worry be "happy".
EOF
$ echo $x
Don't $worry be "happy".

То, что делает эту работу,

  • -r сделает \ не волшебным
  • \EOF вместо EOF делает $ не волшебным

Ответ 3

Если вы хотите назначить цитируемый текст переменной, вы все равно можете использовать heredocs, например (и также может быть многострочным текстом):

read -r -d '' VAR <<'ENDOFVAR'
This "will be" a 'really well' escaped text. Or won't.
ENDOFVAR