什么是环境变量的基础概念?

时间:2016-11-16 17:44:23

标签: node.js linux

愉快的晚上好。我之前在Node.js应用程序中使用过Environment Envirables,但我觉得我还没有理解这个概念。

它(在这种情况下)不是Node让我能够设置环境变量,对吗?是Linux吗?这个概念在整个操作系统中是否仍然存在?环境变量有范围吗?我可以到处使用它们吗?模式总是一样吗?它们是否写入运行应用程序,或者是否有一些应用程序(如节点)能够从内部主动访问它们?

Woulld喜欢把握基本概念。

1 个答案:

答案 0 :(得分:3)

环境变量是操作系统(例如Linux)提供的功能。

您可以使用以下命令在终端或shell脚本中设置:

name=value

或者在Node中使用:

process.env.name = value;

您可以使用以下方式在shell中访问它们:

echo $name

或者在Node中使用:

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的shell脚本:

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

运行sh envtest1.sh wil print:

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

由于yu可以看到节点程序没有获得该值,因为它没有被导出。它可以设置值并使用新值,但不会在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脚本中的值仍为{ {1}}就像以前一样。

这是environemnt变量的3种范围 - 通常不会导出shell脚本中的变量,并且您运行的程序无法看到它。当它被导出时,你运行的程序可以看到它并且可以修改它但它们可以在自己的副本上工作,并且它在shell脚本中没有被更改。

当您运行value时,将仅为该命令设置环境变量,但旧值将保留在脚本的其余部分中。

这些是环境变量的基础知识,以及如何在Node中使用它们。