我有几个文本文件,其中介绍了shell变量(例如$ VAR1或$ VAR2)。
我想将这些文件(一个接一个)保存在新文件中,其中所有变量都将被替换。
为此,我使用了以下shell脚本(可在StackOverflow上找到):
while read line do eval echo "$line" >> destination.txt done < "source.txt"
这在非常基本的文件上效果很好。
但是在更复杂的文件上,“ eval”命令执行的操作过多:
跳过以“#”开头的行
XML文件解析导致大量错误
有更好的方法吗?(在shell脚本中……例如,我知道这很容易用Ant完成)
亲切的问候
看,原来我的系统上有一个envsubst命令是gettext-base包的一部分。
envsubst
因此,这很容易:
envsubst < "source.txt" > "destination.txt"
请注意,如果您想为两者使用相同的文件,则必须使用moreutil’s之类的东西sponge,如Johnny Utahh所建议envsubst < "source.txt" | sponge "source.txt"。(因为shell重定向会在读取之前清空文件。)
sponge
envsubst < "source.txt" | sponge "source.txt"