Replace placeholders from an associative array
Substitute each key in a nameref map with its value inside a file.
18th August 2026
ref_array() {
local varname="$1"
local export_as="$2"
local code
code=$(declare -p "$varname")
echo "${code/$varname/$export_as}"
}
replace_variables() {
eval "$(ref_array "$1" array)"
filename="${2}"
local i search replace
# shellcheck disable=SC2154
for i in "${!array[@]}"; do
search="${i}"
replace="${array[$i]}"
if grep -q "${search}" "${filename}"; then
sed -i '' "s/${search}/${replace}/g" "${filename}"
printf "Replaced %s with %s\n" "${search}" "${replace}"
fi
done
}
Caveats
sed -i '' is the macOS in-place form. On GNU sed use sed -i. Keys are used as regexes.