【发布时间】:2015-06-27 11:42:30
【问题描述】:
我知道你可以使用命令env创建环境变量。
例如:
env A.B=D bash
问题在于 env 需要一个命令,因此需要创建一个新的子进程。
【问题讨论】:
-
无论
env启动什么程序都会重用相同的进程(即env调用exec以将其自身替换为它运行的程序)。
标签: bash
我知道你可以使用命令env创建环境变量。
例如:
env A.B=D bash
问题在于 env 需要一个命令,因此需要创建一个新的子进程。
【问题讨论】:
env 启动什么程序都会重用相同的进程(即env 调用exec 以将其自身替换为它运行的程序)。
标签: bash
Bash 不允许环境变量的名称中包含非字母数字字符(_ 除外)。虽然环境可能包含诸如A.B=D 之类的行,但并不要求shell 能够使用它,而bash 则不会。其他 shell 可能更灵活。
不鼓励使用名称奇怪的环境变量的实用程序,但有些可能存在。您将需要使用env 来创建这样的环境变量。您可以使用 exec env bash 避免子流程,但它不会为您节省太多时间或资源。
【讨论】:
name 的定义中:gnu.org/software/bash/manual/bashref.html#Definitions
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
【讨论】: