elasticsearch docker entrypoint之类的脚本如何管理带有特殊字符的变量名
How do scripts like elasticsearch docker entrypoint manage vairable names with special characters
Elasticsearch 只是一个例子,它的容器将 node.name
或 path.repo
之类的东西作为环境变量。当我尝试访问此类变量时:
${path.repo}
我得到的只是 bad substitution
与 :
相同
${path\.repo}
"${path\.repo}"
这些变量是如何在 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.repo
在 os.spawnvp
生成的子进程中可见。
如果您受限于典型的 shell,您的选择会受到更多限制。您可以使用 env
命令来设置变量,如下所示:
env path.repo=foo somecommand ...
要访问 shell 中的变量,您需要解析 env
命令的输出:
env | awk -F= '/path.repo/ {print }'
Elasticsearch 只是一个例子,它的容器将 node.name
或 path.repo
之类的东西作为环境变量。当我尝试访问此类变量时:
${path.repo}
我得到的只是 bad substitution
与 :
${path\.repo}
"${path\.repo}"
这些变量是如何在 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.repo
在 os.spawnvp
生成的子进程中可见。
如果您受限于典型的 shell,您的选择会受到更多限制。您可以使用 env
命令来设置变量,如下所示:
env path.repo=foo somecommand ...
要访问 shell 中的变量,您需要解析 env
命令的输出:
env | awk -F= '/path.repo/ {print }'