2016-01-24 38 views
0

假設在本地環境中,我們將$VAR擴展爲/path/to/var在Node.js中擴展Shell變量

那麼我該如何利用node.js中的這個優勢呢?特別是,假設我們有:

var str = "$VAR/is/here" 

那麼如何才能獲得strExpanded這樣

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

回答

0

https://nodejs.org/dist/latest-v5.x/docs/api/process.html#process_process_env

例如:

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) 
+0

怎麼能做一個函數掃描$ VARs的字符串並調用process.env.VAR這種方式? – George

+0

如果存在重疊的環境變量,'neededNodeFunction'會失敗。 I.E .:在$ VAR和$ VAR1都定義的情況下,'$ VAR1/file'將返回'$ VAR' +'1' +'/ file'。 – George

+0

這就是爲什麼我會首先尋找npm模塊,然後**修補程序**與該片段:) –

0
var util = require('util'); 
var str = util.format('%s/is/here', process.env.VAR); 

沒有必要NPM庫。如果這應該是一個路徑或類似的一部分,看看path.join:

var path = require('path'); 
var str = path.join(process.env.VAR, 'is', 'here'); 

path.join是本地和平臺需要考慮(轉換爲反斜線在Windows上,forwardslash在Linux/OSX /等),我強烈建議你利用這個而不是替代。

如果你真的真的(仍然非常氣餒)要使用變量替換,因爲該字符串從已被Perl,PHP或任何其他語言,使用語法編碼的另一個系統喂,你可以使用這樣的事情:

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

請注意,根據標準,這需要進行拋光以處理所有可能發現的env變量的變體。大概不能以數字等開頭