为什么可以使用bash $()设置环境变量?

时间:2015-03-15 11:25:24

标签: bash docker

来自Docker文档 - https://docs.docker.com/installation/mac/#install-boot2docker,为什么$()可以设置环境变量

显示Docker客户端的环境变量。

$ boot2docker shellinit

要在shell中设置环境变量,请执行以下操作:

$ $(boot2docker shellinit)

我的问题是:为什么$(boot2docker shellinit)可以设置环境变量?

2 个答案:

答案 0 :(得分:1)

  

为什么$(boot2docker shellinit)可以设置环境变量?

查看以下函数(但它可以是命令或脚本):

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"

答案 1 :(得分:1)

$(command)执行command的输出。所以boot2docker必须输出如下内容:

export env1=val1
export env2=val2
....
export envN=valN

显示运行boot2docker时环境变量的值,并在执行此输出时设置它们。