Lua命令行字符串

3

假设我使用以下命令调用Lua:

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

我怎样才能从Lua中访问相同的命令行字符串?

我知道有关arg表,但它会删除原始命令字符串中的所有引号,使其难以重构:

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

如果我可以在Lua中将精确字符串保存到文件中,我可以轻松地稍后再次调用它。
2个回答

4

@peterpi是正确的,shell正在解释命令,并因此剥离引号。然而,完全重构命令并不是必要的,为了让shell以与之前相同的方式解释命令。

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

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

如果引号确实是必需的,例如当参数包含空格或shell字符时,以下命令将失败。因此,引用所有内容既容易又相对更健壮,但不太美观。

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

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)

1
毫无疑问,有人会证明我错了,但通常情况下我认为这是不可能的。它是“shell”而不是luajit将引号去掉并将行切成单个标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接