В чистом виде bash:
#!/bin/bash
while IFS= read -r casevalue; do
escaped=${casevalue//\'/\'\\\'\'} # escape single quotes if any
while IFS= read -r line; do
if [[ $line = CASE=* ]]; then
echo "CASE='$escaped'"
else
echo "$line"
fi
done < template_script.sh > "script_$casevalue"
done < list.txt
Обратите внимание, что сохранение в "script_ $ casevalue" может не работать, если регистр содержит символ /
.
Если гарантировано, что значения case (строки в list.txt) не нужно экранировать, тогда использовать sed
проще:
while IFS= read -r casevalue; do
sed -E "s/^CASE=(.*)/CASE=$casevalue/" template_script.sh > "script_$casevalue"
done < list.txt
Но этот подход fr agile завершится ошибкой , например, если значение case содержит символ &
. Я считаю, что чистая версия bash
очень надежна.