我知道您可以使用命令env
创建环境变量。
例如:
env A.B=D bash
问题是env需要一个命令,因此创建一个新的子进程。
答案 0 :(得分:7)
Bash不允许名称中包含非字母数字字符的环境变量(除了 _ )。虽然环境可能包含A.B=D
之类的行,但不要求shell能够使用它,而bash则不能。其他炮弹可能更灵活。
不鼓励使用奇怪命名的环境变量的实用程序,但有些可能存在。您需要使用env
来创建这样的环境变量。您可以使用exec env bash
来避免子流程,但它不会在时间或资源方面为您节省太多。
答案 1 :(得分:5)
rici有正确的答案。为了演示访问此类环境条目所需的差异,bash要求您将文本解析为文本:
$ env A.B=C perl -E 'say $ENV{"A.B"}'
C
$ env A.B=C bash -c 'val=$(env | grep -oP "^A\.B=\K.*"); echo "$val"'
C