LINUX.ORG.RU

вопрос по echo

 ,


1

1

Приветствую. Такой момент:

var=100
str=">>>>${var}<<<<"
echo $str
>>>>100<<<<
Подстановка переменной в переменную работает. Хотел из файла вида:
>>>>${data}<<<<
>>>>${mess}<<<<
путём присваивания
str="$(cat file.txt)"
реализовать подстановку данных, но увы...
data=1
mess="on"
echo "$str"
>>>>${data}<<<<
>>>>${mess}<<<<

p.s. без >< можно eval натравить, но спецсимволов в файле много.

Кто в курсе как быть?

Естественно. Ведь содержимое file.txt не передается интерпретатору bash.

Вариантов много. Вот один из них:

$ data=1
$ mess="on"
$ cat file.txt
>>>>{{data}}<<<<
>>>>{{mess}}<<<<

$ for VAR in data mess; do str="$( sed "s/{{$VAR}}/${!VAR}/g" <<< "$str" )" ; done

$ echo "$str"
>>>>1<<<<
>>>>on<<<<

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

Ведь содержимое file.txt не передается интерпретатору bash

но я ведь её в переменную читаю... вот что не пойму.

gnu_linux
() автор топика
Ответ на: комментарий от gnu_linux

Ведь содержимое file.txt не передается интерпретатору bash

но я ведь её в переменную читаю... вот что не пойму.

Но ты читаешь строку, которая в bash вообще не попадает, напрямую в память.

sed'ом делал, да. Но как-то не кошерно)

Кошерно с templating language, такими как TWIG/Jinja. Но для bash можно найти аналоги: https://stackoverflow.com/questions/2914220/bash-templating-how-to-build-conf...

P. S. Кстати, там про envsubst написано

Kroz ★★★★★
()
Ответ на: комментарий от vodz

Работает. Жаль, что с массивом не умеет.

gnu_linux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.