elasticsearch docker entrypoint之类的脚本如何管理带有特殊字符的变量名

How do scripts like elasticsearch docker entrypoint manage vairable names with special characters

Elasticsearch 只是一个例子,它的容器将 node.namepath.repo 之类的东西作为环境变量。当我尝试访问此类变量时: ${path.repo} 我得到的只是 bad substitution 与 :

相同

这些变量是如何在 docker 之外声明的?

我想要一个适用于任何 shell 的解决方案,因为我打算在全球范围内使用它。

我正在尝试重载其中一些变量(简单),然后使用 if 块验证它们的值(我被卡住的地方)。

这些是无效的 shell 变量名,因此您将无法在 shell.其他语言没有该特定限制。例如,在 Python 我可以 运行:

>>> import os
>>> # set environment variable path.repo
>>> os.environ['path.repo'] = 'foo'
>>> # access environment variable path.repo in a child process
>>> res = os.spawnvp(os.P_WAIT, 'python', ['python', '-c', 'import os; print(os.environ["path.repo"])'])
foo

我们可以看到环境变量 path.repoos.spawnvp 生成的子进程中可见。


如果您受限于典型的 shell,您的选择会受到更多限制。您可以使用 env 命令来设置变量,如下所示:

env path.repo=foo somecommand ...

要访问 shell 中的变量,您需要解析 env 命令的输出:

env | awk -F= '/path.repo/ {print }'