导出值包含 space 的环境文件

Exporting an env-file with values containing space

我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:

RUBYOPT='-W:no-derecated -W:no-experimental'

这与其他配置变量一起包含在文件 test.env 中。

我使用此命令导出文件中的所有环境变量:

export $(cat test.env | xargs)

使用上面的值,命令给出这个错误:

-bash: export: `-W:no-experimental'': not a valid identifier

我可以通过复制粘贴 cat test.env | xargs 的输出来导出值,但是在像上面这样的单个命令中它不起作用。

一些测试表明,当值包含 space 并且之后某处是冒号 :.

时会出现问题

我需要什么样的引用魔法才能使我的 env 文件再次工作?

带有 export $(cat test.env | xargs) 的构造非常脆弱,您得到 shell 对 ' 字符(和其他特殊字符)的解释,因此 RUBYOPT='-W:no-derecated -W:no-experimental' 变为 RUBYOPT=-W:no-derecated -W:no-experimental.注意缺少的 '。这不是问题,直到您在其中设置带有 space 的变量。

我建议放弃这种导出环境文件中所有变量的方式。

如果您的 test.env 文件包含未 export 编辑的 bash 语法中的变量赋值,您可以改为打开自动导出,然后获取 test.env 文件。

示例:

set -a      # turn on automatic exporting
. test.env  # source test.env
set +a      # turn off automatic exporting

来自 BASH_BUILTINS (man set):

set -a "每个创建或修改的变量或函数都被赋予导出属性并标记为导出到后续命令的环境。"