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

How do I get lua string match to parse an environment variable string?

我有一个用 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 余额选项来正确匹配 { } 组合。并使它们成为可选的。我如何使这项工作稳健运行?

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

local text = [[
Example: ${LANG}, $TEXTDOMAINDIR, $.00, $$LANG, $UNDEFINED
Nested braces: {{${SHELL}}}
]]
text = text:gsub('$%$','[=10=]')
           :gsub('${([%w_]+)}', os.getenv)
           :gsub('$([%w_]+)', os.getenv)
           :gsub('%z','$')
print(text)
--> Example: en_US.UTF-8, /usr/share/locale/, .00, $LANG, $UNDEFINED
--> Nested braces: {{/bin/bash}}