lua字符串匹配如何解析环境变量字符串?

我有一个用lua编写的配置文件解析器。

我想检测环境变量并使用os.getenv来更改它们的值。

这可能有点雄心勃勃,因为我可能会有像这样的值

"a string with an embedded ${VARIABLE} in here"

或者

"another string with an env $VARIABLE"

我应该允许用双$$转义它们以允许文本中的字面$。

我该怎么做?

这是我到目前为止的代码,但它不正确

local envvar = string.match(value, "%$([%w_]+)")
if envvar then
  print("Envvar=", envvar)
  value = value:gsub("(%$[%w_]+)", os.getenv(envvar))
end

例如,我无法弄清楚如何在这里使用%b平衡选项来正确匹配{}组合。并使它们成为可选的。我如何使这个程序稳健地工作?

实际上,我意识到这可能比这更复杂。如果指定了多个环境变量怎么办?

点赞
用户1847592
用户1847592
local text = [[
Example: ${LANG}, $TEXTDOMAINDIR, $$10.00, $$LANG, $UNDEFINED
Nested braces: {{${SHELL}}}
]]
text = text:gsub('$%$','\0')
           :gsub('${([%w_]+)}', os.getenv)
           :gsub('$([%w_]+)', os.getenv)
           :gsub('%z','$')
print(text)
--> Example: en_US.UTF-8, /usr/share/locale/, $10.00, $LANG, $UNDEFINED
--> Nested braces: {{/bin/bash}}
2015-09-24 23:24:09