在Node.js中展开Shell变量

在Node.js中展开Shell变量,node.js,Node.js,假设在本地环境中,$VAR扩展为/path/to/VAR 那么如何在node.js中利用这一点呢?特别是,假设我们有: var str = "$VAR/is/here" 那么我们怎样才能得到一个扩展的 var strExpanded = neededNodeFunction(str); console.log(strExpanded); // "/path/to/var/is/here" 看 例如: var str = process.env.VAR + "/is/here" 编辑: 我

假设在本地环境中,
$VAR
扩展为
/path/to/VAR

那么如何在node.js中利用这一点呢?特别是,假设我们有:

var str = "$VAR/is/here"
那么我们怎样才能得到一个扩展的

var strExpanded = neededNodeFunction(str);
console.log(strExpanded); // "/path/to/var/is/here"

例如:

var str = process.env.VAR + "/is/here"

编辑: 我会寻找一个npm模块,它首先做这件事。然后最终回到修补类似于

neededNodeFunction = str => Object.keys(process.env)
  .sort((a, b) => b.length - a.length) // sort it by length so 'VAR1' gets before 'VAR'
  .reduce((str, key) => {
    return str.replace(new RegExp(`\\$${key}`, 'g'), process.env[key])
  }, str)
不需要npm库。如果这应该是路径或类似路径的一部分,请查看path.join:

var path = require('path');
var str = path.join(process.env.VAR, 'is', 'here');
path.join是本机的,并考虑了平台(在windows上转换为反斜杠,在linux/osx/etc上转换为正斜杠),我强烈建议您使用它而不是替换

如果您真的(仍然非常不鼓励)希望使用变量替换,因为该字符串是从另一个系统输入的,该系统由Perl、PHP或任何其他使用该语法的语言编写,您可以使用如下内容:

str.replace(/\$[a-z\d_]+/ig, function (match) {
  var sub = process.env[match.substring(1)];
  return sub || match;
})

请注意,根据标准,需要对其进行改进,以处理您可能发现的所有环境变量变化。可能不能以数字等开头。

如何创建一个函数来扫描字符串中的$VARs并以这种方式调用process.env.VAR?
neededNodeFunction
在存在重叠的环境变量时失败。也就是说:
$VAR1/file
将返回
$VAR
+
1
+
/file
,以防
$VAR
$VAR1
都被定义。这就是为什么我会首先查找npm模块,然后修补该代码片段:)可能尝试按长度排序
对象键(process.env)
str.replace(/\$[a-z\d_]+/ig, function (match) {
  var sub = process.env[match.substring(1)];
  return sub || match;
})