2016-11-16 50 views
3

快樂的晚上。我之前在Node.js應用程序中使用過Environment Envirables,但我覺得我還沒有理解底層概念。什麼是環境變量的基礎概念?

它的(在這種情況下)不是節點誰給我設置環境變量的能力,對吧?它是Linux嗎?這個概念是否貫穿整個操作系統?環境變量是否有一個範圍?我可以在任何地方使用嗎?模式總是一樣嗎?他們是寫入運行應用程序,還是讓一些應用程序(如節點)能夠從內部主動訪問它們?

Woulld愛掌握基本概念。

+1

可能重複的[我的環境變量是什麼?](http://stackoverflow.com/questions/4431829/what-are-my-environment-variables) – corn3lius

+0

我不這麼認爲@ corn3lius。這個問題增加了上述問題缺乏的主題的一些真實深度。 – alejdg

+0

@Seltsam,確實[我的回覆](https://stackoverflow.com/questions/40638819/whats-the-underlieing-concept-of-environment-variables/40644231#40644231)回答你的問題?如果是這樣,那麼考慮[接受答案](http://meta.stackexchange.com/a/5235/157646),以便搜索您的問題的其他人可以看到它已被回答。 – rsp

回答

3

環境變量是由操作系統(例如Linux)提供的功能。

可以在終端或shell腳本中使用設置,則:

name=value 

或者在節點中使用:

process.env.name = value; 

您可以通過訪問這些殼:

echo $name 

或者in Node using:

console.log(process.env.name); 

環境變量的範圍是定義它們的過程以及它執行的子過程。

例如寫一個節點程序調用envtest.js:

console.log('Node program:', process.env.test); 
process.env.test = 'new value'; 
console.log('Node program:', process.env.test); 

和外殼腳本調用envtest1.sh:

test=value 
echo "Shell script: $test" 
node envtest.js 
echo "Shell script: $test" 

運行sh envtest1.sh WIL打印:

Shell script: value 
Node program: undefined 
Node program: new value 
Shell script: value 

由於yu可以看到Node程序沒有得到該值,因爲它沒有被導出。它可以設置該值並使用新值,但不會在shell腳本中更改。

現在,寫不同的shell腳本:

test=value 
export test 
echo "Shell script: $test" 
node envtest.js 
echo "Shell script: $test" 

這一次運行sh envtest2.sh會打印:

Shell script: value 
Node program: value 
Node program: new value 
Shell script: value 

這意味着節點計劃得到了價值,因爲它是出口這一次,它仍然可以更改它並使用新值,但它可以在自己的副本上工作,但在調用此Node程序的原始shell腳本中不會更改它。

相反的:

test=value 
export test 

你可以寫:

export test=value 

的簡寫。

一個更復雜的例子,寫envtest3.sh:

export test=value 
echo "Shell script: $test" 
node envtest.js 
echo "Shell script: $test" 
test=value2 node envtest.js 
echo "Shell script: $test" 

這一次,它會打印:

Shell script: value 
Node program: value 
Node program: new value 
Shell script: value 
Node program: value2 
Node program: new value 
Shell script: value 

這表明,運行test=value2 node envtest.jstest變量的值設置爲value2只求這個Node程序的調用 - shell腳本其餘部分的值仍然是value,就像以前一樣。

這些是environemnt變量的3種範圍 - 通常情況下,shell腳本中的變量不會導出,您運行的程序也無法看到它。當它被導出時,你運行的程序可以看到它並且可以修改它,但它們在它們自己的副本上工作,並且在shell腳本中不會更改。

當您運行name=value command時,將爲該命令設置環境變量,但舊值將保留在腳本的其餘部分。

這些是環境變量的基礎知識以及如何在Node中使用它們。