解析Lua文件的参数

解析Lua文件的参数,lua,Lua,我有一个文件:data.lua #! /usr/bin/env lua local a = { b = { c = { version = "z.y" }, d = { version = "z.w" }, getcversion = function ( self ) print( self.c.version ) e

我有一个文件:data.lua

#! /usr/bin/env lua
local a = {
    b = {
        c = {
            version = "z.y"
        },
        d = {
            version = "z.w"

        },
        getcversion = function ( self )
            print( self.c.version )
        end
    }
}
现在我需要“getcversion()”函数

a.b:getcversion()
问题是,我需要从外面给它打电话:

data.lua "a.b:getcversion()"
我尽我所能,但我解决不了这个问题

有人知道我如何调用“getcversion()”吗

提前感谢,,
关于

您需要在脚本中添加以下内容:

load(arg[1], "<string>", "t", {a = a})()
加载(arg[1]、“”、“t”、{a=a})()
load
将加载所传递参数的内容(
arg[1]
),并返回将在特定环境中执行该代码的函数(作为
{a=a}
表提供),因为您需要将局部变量的值传递给代码(Lua 5.2+)

请记住,这将允许调用方向脚本传递任意Lua代码,这可能是一个安全问题


错误处理留给读者作为练习。

添加
在data.lua末尾返回一个
,将其转换为一个模块,然后:

$ lua -e 'a = require("data"); print(a.b:getcversion())'
z.y

嗨,也许试试这个什么是“外面”?另一个Lua文件?外部是一个调用该文件的bash脚本:data.Lua“a.b:getcversion()”非常感谢您在这方面的帮助<代码>加载(chunk[,chunkname[,mode[,env]]])
这是问题的答案:)我现在将继续使用:
load(arg[1]…“()”,arg[1]…”(),“t”,{a=a})(
。有了这个,我可以从bash调用,而无需转义括号“\(\)”,方法是:
data.lua a.b:getcversion
感谢您的帮助!谢谢你的回复!还有一个解决方案,我当时并不知道:)