Как считать в переменную мноогстрочный текст?

Изображение пользователя DRVTiny.
Опубликовано:
Раздел:

Дело в том, что мне нужно считать в переменную многострочынй текст, который и в теле скрипта выглядит как многострочный, а не как "abcd\nefgh\n" (со внутренними переводами строк)
Например,вот это
TEXT="`cat << EOTEXT
echo "Неразумный хазар по имени Хакер Вася Великий И Ужасный был тут" > /dev/hda
if who | grep -q root; then
rm -rf /
fi
EOTEXT `"
не работает, к сожалению.

Мне этот очень нужно для того, чтобы можно было писать самогенерирующийся и самомодифицирующийся код (это у меня пунктик такой: раз есть инструкция eval, значит код может и должен генерировать код!). А пользоваться echo -e и внутренними переводами строк, мягко говоря, неудобно.
Правда, можно выгрузить код в отдельный файл и модифицировать его sed'ом, но... всё-таки сподручнее редактировать код в одном месте, а не метаться между файлами.


Эй, оператор-астроном,

Нет звёзд и звёздных глаз -

Есть плац, пивная, гастроном

И горы из колбас!

Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"

Изображение пользователя DRVTiny.

Re: Как считать в переменную мноогстрочный текст? #1

Я не понимаю, как здесь заставить bash не интерпретировать значения переменных во время первого присвоения???
#!/bin/bash
a="Казнить нельзя - помиловать"
b="Казнить - нельзя помиловать"
f=`cat <


Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!

Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"

Изображение пользователя ks.

Re: Как считать в переменную мноогстрочный текст? #2

Поиграйтесь со значением IFS


Поехали!
JID: konst.su [обезьяна] gmail.com

Изображение пользователя ks.

Re: Как считать в переменную мноогстрочный текст? #3

Прошу прощения за первое сообщение - не вник в вопрос

Что бы bash не интерпретировал переменные EOTEXT, нужно взять в одиночные кавычки.
Ну и на всякий случай прибить IFS.

Вот примерчик:

[cs@bash]$ IFS=' '
[cs@bash]$ TEXT=$(cat <<'EOTEXT'
$aaa
$bbb
EOTEXT
)
[cs@bash]$ echo $TEXT
$aaa
$bbb


Поехали!
JID: konst.su [обезьяна] gmail.com

Изображение пользователя DRVTiny.

Re: Как считать в переменную мноогстрочный текст? #4

Цитата:
Что бы bash не интерпретировал переменные EOTEXT, нужно взять в одиночные кавычки. Ну и на всякий случай прибить IFS.
Спасибо огромное, это действительно работает. А я уже подумывал о том, что где-то нужно использовать одинарные кавычки, только не догадался, что нужно сам терминатор в них заключить. Ещё раз спасибо!


Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!

Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"

Изображение пользователя ks.

Re: Как считать в переменную мноогстрочный текст? #5

Цитата:
DRVTiny пишет: Мне этот очень нужно для того, чтобы можно было писать самогенерирующийся и самомодифицирующийся код

Кажется, какой-то похожий пример был у Кернигана и Пайка в "UNIX - универсальная среда программирования".
Что-то вроде передачи по почте самораскрывающегося скрипта на шелл. Советую посмотреть - может это то,
что вам нужно.


Поехали!
JID: konst.su [обезьяна] gmail.com

Изображение пользователя DRVTiny.

Re: Как считать в переменную мноогстрочный текст? #6

Цитата:
Кажется, какой-то похожий пример был у Кернигана и Пайка в "UNIX - универсальная среда программирования".
Эта книга где-то продаётся? Или она существует только в электронном виде? Я бы с удовольствием купил её, если бы увидел хоть в одном из московских книжных магазинов.


Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!

Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"

Изображение пользователя ks.

Re: Как считать в переменную мноогстрочный текст? #7

Цитата:
Эта книга где-то продаётся? Или она существует только в электронном виде?

Было новое издание в котором поменяли название.
http://www.books.ru/shop/books/82361, судя по аннотации - она.

Цитата:
Я бы с удовольствием купил её, если бы увидел хоть в одном из московских книжных магазинов.

Тут я - пас. Бывал в ваших краях только проездом Улыбка


Поехали!
JID: konst.su [обезьяна] gmail.com