в зависимости от того, как инициализируются ваши переменные, лучше использовать скобки:
new_db_name=`echo "$new_db_name" | sed "s/${replace_string}`/${replace_with}/"
Может быть, я что-то упускаю, но new_db_name=echo "$new_db_name"
здесь не имеет смысла. $ new_db_name пусто, поэтому вы выводите нулевой результат, а затем вывод команды sed. Чтобы захватить stdout как переменную, обратные пометки больше не рекомендуются. Захват вывода в окружении $()
.
new_db_name=$(sed "s/${replace_string}/${replace_with}/")
Возьмите следующий пример:
replace_string="replace_me"
replace_with=$(cat replace_file.txt | grep "replacement_line:" | awk FS" '{print $1}')
Где replace_file.txt может выглядеть примерно так:
old_string: something_old
I like cats
replacement_line: "shiny_new_db"
Просто наличие переменной в выражении sed $replace_with
не сработает. У bash недостаточно контекста, чтобы избежать выражения переменной. ${replace_with}
указывает bash явно использовать содержимое команды, выданной переменной.