Вот скрипт script.sh, который работает:
#!/bin/bash
user=oracle
password=oracle123
dbname=oracle
variable='variable_list'
text=$(cat input.sh)
while read line
do
value=$(eval echo $line)
text=$(sed "s/$line/$value/g" <<< "$text")
done < "$variable"
echo "$text" > output.sh
Обратите внимание, что ваша оригинальная версия содержит одинарные кавычки вокруг строки sed, которая не вставляет значение $line
.Он пытается найти литерал line
после конца строки $
(который никогда ничего не найдет).
Поскольку вы ищете значение переменной в $line
, вычтобы получить это, нужно выполнить eval.
Кроме того, поскольку существует несколько переменных, над которыми вы зацикливаетесь, промежуточная переменная text
сохраняет результат в цикле.
export
Ключевое слово также не нужно в этом сценарии, если только оно не используется в некотором подпроцессе, который не показан.