如何打印解释了环境变量的文件内容

如何打印解释了环境变量的文件内容

这个问题与这个问题类似: 是否可以用shell脚本打印变量的内容? (间接引用)

在一个文件中是

a=${env1}is a good ${env2}
b=${env3}is a good ${env2}

我想将此文件的内容显示给:

a=tom is a good cat
b=jerry is a good mouse

我试过这个:

tmp=`cat a.conf`
echo $tmp # environmental variables are not interpreted, and file format changed, hard to read
echo ${!tmp} # no ...

另外,上面的想法有点绕道。

答案1

如果您有一个如下所示的文件:

a=${env1} is a good ${env2}
b=${env3} is a good ${env4}

如果您想要生成替换变量的输出,则可以使用该envsubst命令,该命令是gettext包的一部分。假设上面的内容在 中example.txt.in,我们可以运行:

env1=tom env2=cat env3=jerry env4=mouse envsubst < example.txt.in

并得到输出:

a=tom is a good cat
b=jerry is a good mouse

如果ensubst不可用,您可以执行以下操作:

#!/bin/sh

tmpfile=$(mktemp scriptXXXXXX)
trap 'rm -f $tmpfile' EXIT

cat > "$tmpfile" <<END_OUTSIDE
cat <<END_INSIDE
$(cat)
END_INSIDE
END_OUTSIDE

sh "$tmpfile"

将脚本命名为类似 的名称envsubst.sh,然后与前面的示例类似地运行它:

env1=tom env2=cat env3=jerry env4=mouse sh envsubst.sh < example.txt.in

相关内容