Bash/Zsh - 导出包含冒号的环境变量名称

4
我正在尝试在bash中设置以下环境变量:
ConnectionStrings:DefaultConnection = someValue 我使用以下命令:
export ConnectionStrings: DefaultConnection = something
在bash中,我会收到以下错误消息:
export:'ConnectionStrings: DefaultConnection = something':不是有效的标识符
在zsh中,会出现以下错误:
export:在此上下文中无效:ConnectionStrings:DefaultConnection
如何设置包含冒号的变量名的环境变量?

我认为你不能在bash中这样做。 - Inian
由于冒号具有特殊含义,所以呢? - kkyr
1
Bash中的变量名只能包含字母数字或下划线,并且不能以数字开头。请参阅http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html。 - cdarke
这是一个常见的问题,但我在 Stack Overflow 上找不到一个好的重复问题。常见的解决方法是 env ConnectionStrings:DefaultConnection=something bash - tripleee
5
我来到这个页面是因为我正在使用带有冒号的环境变量在Docker容器中运行.NET Core,并且该应用程序是从shell脚本启动的。该shell脚本会移除环境变量,因为它不喜欢它们。解决方法是使用.NET Core支持的另一种冒号的替代格式,即双下划线。因此,ConnectionStrings:DefaultConnection变成了ConnectionStrings__DefaultConnection - Loathian
1个回答

5
Bash不支持这样的名称,但您可以使用像envpython这样的外部程序来创建它们。

使用env

命令env将设置环境并运行另一个命令。例如,在这里我们使用env来运行printenv

$ env a:b=3 printenv | grep ^a
a:b=3

env也可以用于运行新的shell:

$ env a:b=4 bash
$ printenv | grep ^a
a:b=4

使用Python

Python允许对环境进行操作。此Python脚本创建带有冒号的环境变量,然后运行bash实例:

(感谢Chepner提供的提示。)
$ cat colon.py
#!/bin/python 
import os
import subprocess
os.environ['a:b'] = 'c'
os.environ['ConnectionStrings:DefaultConnection'] = 'someValue'
subprocess.call('bash')

如果我们运行上述脚本,将会得到一个新的bash提示符。在新的提示符下,我们可以验证变量是否存在:
$ printenv | grep -E 'Connection|a:b'
ConnectionStrings:DefaultConnection=someValue
a:b=c

Bash支持的环境变量名称

除非有非常好的理由需要使用不符合规范的变量名,否则最好使用bash支持的变量名。这些变量名应该以字母或下划线开头,后跟零个或多个字母数字字符或下划线。


1
不错的技巧。虽然我会采纳你的建议,选择一个更简单的变量名!谢谢。 - kkyr
很巧妙的技巧!但是为什么不想在bash中实现呢?也许他们不想支持这样的约定?在这种情况下,您不认为推荐这种用法是不明智的吗? - Inian
1
bash doesn't provide arbitrary access to the environment, only to those names which are valid shell identifiers. You can use the env command to add other names to an environment if needed. env a:b=3 commandThatUsesA:B - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接