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

Bash/Zsh-导出名称包含冒号的环境变量,bash,environment-variables,zsh,Bash,Environment Variables,Zsh,我正在尝试在bash中设置以下环境变量: ConnectionString:DefaultConnection=someValue 我正在使用以下命令: 导出连接字符串:DefaultConnection=something 在bash中,我得到以下错误: export:'ConnectionStrings:DefaultConnection=something':不是有效的标识符 在zsh中,出现以下错误: 导出:在此上下文中无效:ConnectionString:DefaultConnect

我正在尝试在bash中设置以下环境变量:

ConnectionString:DefaultConnection=someValue

我正在使用以下命令:

导出连接字符串:DefaultConnection=something

在bash中,我得到以下错误:

export:'ConnectionStrings:DefaultConnection=something':不是有效的标识符

在zsh中,出现以下错误:

导出:在此上下文中无效:ConnectionString:DefaultConnection


如何设置变量名包含冒号的环境变量?

Bash不支持此类名称,但您可以使用外部程序(如
env
python
)创建它们

使用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

$ 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支持的变量名要容易得多。这将包括以字母或下划线开头,后跟零个或多个字母数字字符或下划线的名称。

我认为在
bash
中不能这样做,因为冒号有特殊含义?bash中的变量名称只能包含字母数字或下划线,不能以数字开头。这是一个常见的问题,但我在堆栈溢出上找不到合适的副本。常见的解决方法是
env ConnectionStrings:DefaultConnection=something bash
,因此我碰巧看到了这个页面,因为我在docker容器中使用带有冒号的环境变量,并且应用程序是从shell脚本启动的。shell脚本删除环境变量,因为它不喜欢它们。对我来说,解决办法是使用支持的冒号到双下划线的替代格式,这是.NETCore非常支持的。对于此
ConnectionStrings:DefaultConnection
将成为
ConnectionStrings\uuu DefaultConnection
Nice hack。尽管我会接受你的建议,选择一个更简单的变量名!谢谢你的把戏!但是为什么希望在
bash
中不可行呢?也许他们不想支持这样一个公约?您不认为在这种情况下,推荐这样的用法是不明智的吗?
bash
不提供对环境的任意访问,只提供对有效shell标识符的名称的访问。如果需要,可以使用
env
命令将其他名称添加到环境中<代码>环境a:b=3条使用a:b的命令