在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;
})