在擊運行這些命令:爲什麼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) –