Lua 命令行字符串

Lua cmd-line string

假设我用这个 cmd 调用 Lua:

luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50

如何从 Lua 访问相同的 cmd 行字符串?

我知道 arg table,但它删除了原始命令字符串中的所有引号,因此难以重建:

{
   "--maxEpoch"
   "--satEpoch"
   "50"
   "somestring"
   [-1] : "luajit"
   [0] : "examples/neuralnetwork.lua"
}

如果我可以从 Lua 中将确切的字符串保存到文件中,我以后可以轻松地再次调用它。

毫无疑问有人会证明我是错的,但通常我认为这是不可能的。是 shell 而不是 luajit 去掉引号并将行分割成单独的标记。

@peterpi 是正确的,shell 正在解释命令并因此去除引号。但是,要让 shell 以与以前相同的方式解释命令,并不需要完全重建命令。

对于简单的情况,将参数连接到脚本通常就足够了:

local command = table.concat(arg, ' ', -1, #arg)

如果确实需要引号,这将失败,最常见的是当参数包含 space 或 shell 字符时,因此引用所有内容很容易并且更健壮,但并不漂亮。

这是一个示例,其中使用 Lua 模式来检查特殊 (bash) shell 字符和 space 来决定是否需要引号以及需要哪些引号。它可能不完整,但它处理文件名、大多数字符串和数字作为参数。

local mod_arg = { }
for k, v in pairs(arg) do
    if v:find"'" then
      mod_arg[k] = '"'..v..'"'
    elseif v:find'[%s$`><|#]' then
      mod_arg[k] = "'"..v.."'"         
    else
      mod_arg[k] = v
    end
end 
local command = table.concat(mod_arg, ' ', -1, #mod_arg)
print(command)