来自/到文件的变量替换

来自/到文件的变量替换

如何用另一个文件中的变量替换文件中的占位符?(就像docker-compose所做的那样。)

我发现了很多关于单变量替换或环境变量替换的文章,但没有找到文件到文件的文章。

.env 文件

name=John
time='10:00'

内容文件

Hello "${name}"! I wait for u since ${time}.

输出文件:

Hello "John"! I wait for u since 10:00.

编辑:请注意,我也想将 保留"在文件中。

Edit2:我最终使用了@steeldriver 的解决方案。这就是我现在在脚本中使用的:

# Make copy of the template folder (containing scripts and `.env` file)
cp -r templates .templates

# Replace environment variables in all files of the folder
set -a
for file in $(find .templates -type f)
do
    . ./.env && envsubst < $file > $file.tmp && mv $file.tmp $file
done
set +a

# create output directory
mkdir -p $HOME/output/

# copy if new or modified
rsync -raz .templates/. $HOME/output/

# remove temp folder
rm -r .templates

答案1

使用envsubst

set -a
. ./.env && envsubst < content
set +a

set -a/打开set +a/关闭创建/修改的变量的自动导出。

答案2

找到了一个可行的解决方案将文件中的环境变量替换为其实际值?

(. .env && eval "echo \"$(cat config.xml)\"")

编辑:此解决方案还删除"文件中的标记。那不是我想要的。

相关内容