【发布时间】:2016-08-19 14:54:21
【问题描述】:
在 Bash 中运行这些命令:
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)
然后在 Bash 中运行这些命令:
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,node 是一个外部命令,Bash fork 并在子进程中运行它,node 没有从父进程中获取$NODE_ENV。
export NODE_ENV=production && node index.js, export 使变量可用于子进程,因此节点获得$NODE_ENV。
【问题讨论】:
标签: node.js bash environment-variables