如何在密钥中使用正斜杠设置环境变量

How to set environment variables with a forward slash in the key

有没有办法导出名称中带有斜杠的环境变量,例如:

export /myapp/db/username=someval

This post 表示应该可以,但我无法找出有效的语法。

背景:

我正在使用 confd 从模板和密钥库生成配置文件。典型的商店(consul、etcd)使用分层键,例如 /myapp/db/username。我想透明地允许在使用基于环境变量的提供程序和利用分层键的配置存储之间切换。

是的,您可以导出这样的环境变量,但不能从 bash export 语句中导出。

虽然 bash 将拒绝创建名为 a/b 的环境变量,但我们可以使用 python 和 shell 创建的环境变量 shell =26=] 会看到的。

例如,考虑以下 python 命令:

$ python -c 'import os; os.environ["a/b"]="2"; os.system("/bin/bash");'

如果我们运行这个命令,我们就放到一个subshell。从那个subshell可以看出环境变量创建成功:

$ printenv | grep a/b
a/b=2

(此时,可能想要退出 subshell(键入 exit 或 ctrl-D)到 return 到 python 程序,它将退出并 return 我们到主要 shell。)

export 仅标记要导出到环境中的有效 shell 标识符,而不是任何可以在环境中形成有效 name/value 对的字符串。不过,您可以使用 env 创建具有此类环境的 new shell 实例。

env "/myapp/db/username=someval" bash