37

我想做

 lua prog.lua arg1 arg2

从命令行

在 prog.lua 里面,我想说,例如

print (arg1, arg2, '\n')

Lua 似乎没有 argv[1] 等,我见过的处理命令行参数的方法似乎不成熟和/或繁琐。我错过了什么吗?

4

5 回答 5

54

您缺少arg向量,其中包含您想要的元素arg[1]arg[2]等等:

% lua -i -- /dev/null one two three
Lua 5.1.3  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(arg[2])
two
> 

有关Lua 独立的 Lua 手册部分的更多信息(感谢 Miles!)。

于 2010-05-31T20:29:08.943 回答
26

除了arg表之外,...还包含用于调用脚本的参数(arg[1] 及以上)。

% lua -i -- /dev/null 一二三
Lua 5.1.3 版权所有 (C) 1994-2008 Lua.org, PUC-Rio
> 打印(...)
一二三
于 2010-06-03T12:56:07.173 回答
5

Lua 将参数存储在一个表中。该表是“arg”表。您可以使用 arg[1], arg[2], ... 访问内部传递的参数

arg[0] 是 lua 程序的名称。arg[1] 是传递的第一个参数,arg[2] 是传递的第二个参数,依此类推...

于 2012-01-24T10:09:50.710 回答
2

如果你在 freeswitch 的 cmd 中运行 file.lua

freeswitch> luarun prog.lua arg1

您可以使用 prog.lua:

#print(argv[1])

并运行:($lua prog.lua arg1在脚本文件夹中运行)您可以使用 prong.lua:

#print(arg[1])
于 2014-02-20T04:40:53.767 回答
0

对于 OP 和未来的访客,

Lua 的库不包含injecting a table 'args' into globals from command line switches. 但是,构建的程序lua.c确实几乎不可能使用。无法使用的原因是程序不喜欢多个开关。

LuaConsole这是我的 REPL/代码执行器被构建的原因之一。它为您提供表args以及向根 pcall 函数发送一个元组(您的执行环境实际上是一个顶级 pcall,可能附加了一个错误处理程序)。因此,无论您想要多少开关,两者都可以正常工作args[n]local a = {...}; a[n] ...;例如,-e 从 cmd 行执行代码,-l 指定库等。它支持任何 lua51 及更高版本。

如果您在使用库中的程序时遇到问题,我强烈建议您查看https://www.github.com/tilkinsc/LuaConsole,因为它可以让您免去处理感觉很糟糕的程序的麻烦。还有其他替代方案,例如 web、fengari。

希望这对你有帮助!

于 2019-12-28T04:08:37.273 回答