为什么 bash $() 可以设置环境变量?
Why can bash $() set environment variables?
来自Docker文档-https://docs.docker.com/installation/mac/#install-boot2docker,为什么$()
可以设置环境变量
显示 Docker 客户端的环境变量。
$ boot2docker shellinit
要在 shell 中设置环境变量,请执行以下操作:
$ $(boot2docker shellinit)
我的问题是:为什么$(boot2docker shellinit)
可以设置环境变量?
Why can $(boot2docker shellinit)
set environment variables?
查看以下函数(但它可以是命令或脚本):
foo() { echo "export a=b"; }
这个命令只做一个:打印export a=b
到标准输出:
$ foo() { echo "export a=b"; }
$ foo
export a=b
现在,command substitution 允许命令的输出替换命令本身。因此,如果您 运行 $(foo)
那么 Bash 将首先执行 foo
然后使用该命令的输出来构建命令。在我们的例子中,输出为 export a=b
,Bash 将执行它:
$ declare -p a
bash: declare: a: not found
$ $(foo)
$ declare -p a
declare -x a="b"
$(command)
执行 command
的输出。所以 boot2docker
必须输出如下内容:
export env1=val1
export env2=val2
....
export envN=valN
当 boot2docker
为 运行 时显示环境变量的值,并在执行此输出时设置它们。
来自Docker文档-https://docs.docker.com/installation/mac/#install-boot2docker,为什么$()
可以设置环境变量
显示 Docker 客户端的环境变量。
$ boot2docker shellinit
要在 shell 中设置环境变量,请执行以下操作:
$ $(boot2docker shellinit)
我的问题是:为什么$(boot2docker shellinit)
可以设置环境变量?
Why can
$(boot2docker shellinit)
set environment variables?
查看以下函数(但它可以是命令或脚本):
foo() { echo "export a=b"; }
这个命令只做一个:打印export a=b
到标准输出:
$ foo() { echo "export a=b"; }
$ foo
export a=b
现在,command substitution 允许命令的输出替换命令本身。因此,如果您 运行 $(foo)
那么 Bash 将首先执行 foo
然后使用该命令的输出来构建命令。在我们的例子中,输出为 export a=b
,Bash 将执行它:
$ declare -p a
bash: declare: a: not found
$ $(foo)
$ declare -p a
declare -x a="b"
$(command)
执行 command
的输出。所以 boot2docker
必须输出如下内容:
export env1=val1
export env2=val2
....
export envN=valN
当 boot2docker
为 运行 时显示环境变量的值,并在执行此输出时设置它们。