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

如何让lua字符串匹配来解析环境变量字符串?,lua,string-matching,lua-patterns,luajit,Lua,String Matching,Lua Patterns,Luajit,我有一个用lua编写的配置文件解析器 我想检测作为环境变量的值,并用os.getenv更改它们 这可能有点雄心勃勃,因为我可以有这样的价值观 "a string with an embedded ${VARIABLE} in here" 或 我可能应该允许使用双精度$$来转义它们,以允许使用文字$ 我该怎么做 到目前为止,这是我所知道的,但这是不对的 local envvar = string.match(value, "%$([%w_]+)") if envvar then print(

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

我想检测作为环境变量的值,并用os.getenv更改它们

这可能有点雄心勃勃,因为我可以有这样的价值观

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

我可能应该允许使用双精度$$来转义它们,以允许使用文字$

我该怎么做

到目前为止,这是我所知道的,但这是不对的

local envvar = string.match(value, "%$([%w_]+)")
if envvar then
  print("Envvar=", envvar)
  value = value:gsub("(%$[%w_]+)", os.getenv(envvar))
end
例如,我不知道如何在这里使用%b balance选项来正确匹配{}组合。并使它们成为可选的。我如何使这项工作稳健


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

太好了,非常感谢!
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}}
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}}