【问题标题】:Whats the underlieing concept of environment variables?环境变量的基本概念是什么?
【发布时间】:2017-03-31 01:06:25
【问题描述】:

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

它(在这种情况下)不是让我能够设置环境变量的节点,对吧?是Linux吗?这个概念是否贯穿整个操作系统?环境变量有范围吗?我可以在任何地方使用它们吗?模式总是一样的吗?它们是写入运行应用程序,还是某些应用程序(如节点)能够从内部主动访问它们?

很想掌握基本概念。

【问题讨论】:

  • 我不这么认为@corn3lius。这个问题为所提到的问题所缺乏的主题增加了一些真正的深度。
  • @Seltsam,my reply 回答你的问题了吗?如果是这样,请考虑accepting the answer,以便其他搜索您的问题的人可以看到该问题已得到解答。

标签: node.js linux


【解决方案1】:

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

您可以在终端或 shell 脚本中使用:

name=value

或者在 Node 中使用:

process.env.name = value;

您可以使用以下命令在 shell 中访问它们:

echo $name

或者在 Node 中使用:

console.log(process.env.name);

环境变量的作用域是定义它们时的进程和它执行的子进程。

例如编写一个名为 envtest.js 的 Node 程序:

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 将打印:

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

正如你所见,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程序得到了这个值,因为它这次被导出了,它仍然可以改变它并使用新的值,但是它在它自己的副本上工作,它在调用这个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,就像以前一样.

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2014-09-22
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多