这个问题与这个问题类似: 是否可以用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