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

Аватар пользователя 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: Как считать в переменную мноогстрочный текст?

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

Аватар пользователя ks

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

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

Аватар пользователя ks

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

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

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

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

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

Аватар пользователя DRVTiny

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

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

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

Аватар пользователя ks

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

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

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

Аватар пользователя DRVTiny

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

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

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

Аватар пользователя ks

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

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

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

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

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

RSS-материал