【问题标题】:Bash/Zsh - Export environment variable with name containing a colonBash/Zsh - 导出名称包含冒号的环境变量
【发布时间】:2017-12-15 07:46:23
【问题描述】:

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

ConnectionStrings:DefaultConnection=someValue

我正在使用以下命令:

export ConnectionStrings:DefaultConnection=something

在 bash 中我收到以下错误:

export: 'ConnectionStrings:DefaultConnection=something': not a valid identifier

在zsh中出现以下错误:

export: not valid in this context: ConnectionStrings:DefaultConnection

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

【问题讨论】:

  • 我不认为你可以在bash中做到这一点
  • 既然冒号有特殊含义?
  • bash 中的变量名只能包含字母数字或下划线,不能以数字开头。另见pubs.opengroup.org/onlinepubs/009695399/basedefs/…
  • 这是一个常见问题,但我在 Stack Overflow 上找不到合适的副本。常见的解决方法是env ConnectionStrings:DefaultConnection=something bash
  • 所以我碰巧到达了这个页面,因为我在 docker 容器中使用 .NET Core,使用带有冒号的环境变量,并且应用程序是从 shell 脚本启动的。 shell 脚本会删除环境变量,因为它不喜欢它们。对我来说,解决方法是使用另一种支持的冒号格式来加双下划线,.NET Core 非常支持这种格式。为此,ConnectionStrings:DefaultConnection 变为 ConnectionStrings__DefaultConnection

标签: bash environment-variables zsh


【解决方案1】:

Bash 不支持此类名称,但您可以使用 envpython 等外部程序创建它们。

使用环境

命令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

(帽子提示:Chepner)。

使用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 不提供对环境的任意访问,仅对那些是有效 shell 标识符的名称提供访问。如果需要,您可以使用env 命令将其他名称添加到环境中。 env a:b=3 commandThatUsesA:B
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2013-08-30
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多