Оболочка: как написать многострочный текстовый файл без экранирования специальных символов?

3

Я знаю, что этот вопрос звучит тысячи раз раньше. Но почему-то я не могу найти хорошее решение.

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

В настоящее время я использую кошку:

cat <<TAGTEXTFILE > sometext.txt
Here is some text in which I don't want to escape sequences like: $().
I just want to see this text in this script exactly as 
it will look in resulting sometext.txt file.
TAGTEXTFILE

Но с кошкой я должен избежать этого: $ (). Как написать многострочный текст без экранирования специальных символов? Пожалуйста, не предлагайте использовать Python, мне нужно решение оболочки (bash или dash).

vladimir
источник
1
Какая у вас система? я не могу воспроизвести вашу проблему на минах (Ubuntu 12.04 и Debian 5). Скопируйте / вставьте ваш код работает как шарм ...
user2196728
@ user2196728 это работает, но не будет работать, например, если в нем есть $ PWD. в этом-то и дело
Robin Green
Вы хотите $PWD быть расширенным (как /home/vladimir/foo/ ) или нет?
terdon
Да, точно. Мой образец был не из реальной жизни, я просто изменил его. Таким образом, $ () появляется в скрипте, но не в текстовом файле. Я понимаю почему, мне просто не нужен этот функционал. На самом деле я не хочу, чтобы что-либо расширялось, ни $ PWD, ни $ (...) команды, и мне все еще нужен удобный способ написания многострочного текста.
vladimir

Ответы:

6
cat <<"TAGTEXTFILE" > sometext.txt
... some text ...
TAGTEXTFILE
Robin Green
источник
Вот Это Да! Какой трюк! Как ты учишь такие вещи? Это где-то в человеке?
vladimir
он находится в info bash, Но обычно, когда я хочу узнать, как сделать что-то в bash, я использую Google, потому что с документацией сложно ориентироваться.
Robin Green
Смотрите раздел man страница в разделе «Здесь документы». Соответствующее предложение «Если какие-либо символы в слово цитируются, [...] строки в документе здесь не расширены ".
chepner