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