鉴于两个dotenv文件,

# file1
FOO="X"
BAR="B"

# file2
FOO="A"
BAZ="C"

我想跑

$ ./merge.sh file1.env file2.env > file3.env

获得以下输出:

# file3
FOO="A"
BAR="B"
BAZ="C"

到目前为止,我使用python-dotenv module将文件解析为字典,合并它们并将它们写回。但是,我觉得在shell中应该有一个简单的解决方案可以解决third-party module这样一个基本任务。


回答

好吧,所以我最终使用了

$ sort -u -t '=' -k 1,1 file1 file2 | grep -v '^$\|^\s*\#' > file3

省略空行和注释。尽管如此,提出的awk解决方案效果还不错。

分析解答

另一种非常简单的方法是使用sort:

sort -u -t '=' -k 1,1 file1 file2 > file3

导致file1中的键优先于file2中的键的文件。