在击运行这些命令:为什么bash环境变量在shell与node中有所不同?
NODE_ENV=production echo $NODE_ENV
输出 “”NODE_ENV=production && echo $NODE_ENV
输出 “生产”export NODE_ENV=production && echo $NODE_ENV
输出 “生产”
现在有一文件index.js:
console.log(process.env.NODE_ENV)
然后在击运行这些命令:
NODE_ENV=production node index.js
输出 “生产”NODE_ENV=production && node index.js
输出 “未定义”export NODE_ENV=production && node index.js
输出“生产“
我对这些命令感到困惑,为什么结果不同?
编辑:
谢谢大家。现在我给出我的解释,也许这对其他人有帮助。
NODE_ENV=production echo $NODE_ENV
,Bash在运行此命令之前花费$NODE_ENV
,此时$NODE_ENV
未设置,因此结果为空。
NODE_ENV=production && echo $NODE_ENV
,这些是两个命令,第二个命令只在第一个命令成功时才运行。在运行第二个命令之前,Bash花费$NODE_ENV
这是设置在这一点上。
NODE_ENV=production node index.js
,将变量定义添加到命令前面会使此变量对此命令可用。
NODE_ENV=production && node index.js
,节点是一个外部命令,Bash分叉并在子进程中运行它,节点不从父进程得到$NODE_ENV
。
export NODE_ENV=production && node index.js
,export
使变量可用于子流程,因此节点得到$NODE_ENV
。
相关:[在命令行上指定回声的环境变量?](http://stackoverflow.com/questions/10938483/bash-specifying-environment-variables-for-echo-on-command-line) –