sed is an often used pattern to replace variables in bash files. I find sed commands to be very hard to read though. An easier way is using envsubst:
test.sh
foo=$FOO
bar=$BAR
envsubst replaces the variables in test.sh. Defining $BAR afterwards, replaces only this variable.
BAR=foo envsubst '$BAR'< test.sh
foo=$FOO
bar=foo
Sourcing an environment beforehands makes it possible to store all values which should be replaced in a file.
With > the content can be written to a new file. Caution: Overwriting the same file does not work.
source .env
envsubst < test.sh > destination.sh
foo=$FOO
bar=foo