Как получить lua string match для разбора строки переменной окружения?
У меня есть парсер конфигурационных файлов, написанный на lua.
Я хотел бы обнаружить значения, которые являются переменными окружения, и изменить их с помощью ОС.функции getenv.
Это, вероятно, немного амбициозно, потому что у меня могут быть такие значения, как
"a string with an embedded ${VARIABLE} in here"
Или
"another string with an env $VARIABLE"
И я, вероятно, должен позволить экранировать их с помощью double $$, чтобы разрешить литерал $.
Как мне это сделать?
Это то, что у меня есть до сих пор, но это неправильно
local envvar = string.match(value, "%$([%w_]+)")
if envvar then
print("Envvar=", envvar)
value = value:gsub("(%$[%w_]+)", os.getenv(envvar))
end
Например, я не могу понять, как использовать %b опция баланса здесь для правильного подбора комбинаций { }. И сделать их необязательными. Как мне заставить это работать надежно?
На самом деле, я понимаю, что это, вероятно, сложнее, чем это. Что делать, если указано несколько переменных окружения?1 ответ:
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}}