我希望
lua prog.lua arg1 arg2
从命令行
在prog.lua里面,我想说,例如
print (arg1, arg2, '\n')
Lua似乎没有argv [1]等,而我看到的处理命令行参数的方法似乎不成熟和/或繁琐。我错过了什么吗?
答案 0 :(得分:45)
您错过了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 manual section on Lua standalone中的更多信息(感谢Miles!)。
答案 1 :(得分:25)
除了arg
表之外,...
还包含用于调用脚本的参数(arg [1]和up)。
% lua -i -- /dev/null one two three Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print(...) one two three
答案 2 :(得分:5)
Lua将参数存储在表中。该表是“arg”表。您可以使用arg [1],arg [2],...
访问内部传递的参数arg [0]是lua程序的名称。 arg [1]是传递的第一个参数,arg [2]是传递的第二个参数,依此类推......
答案 3 :(得分:2)
如果你在freeswitch的cmd中运行file.lua
freeswitch> luarun prog.lua arg1
您可以使用prog.lua:
#print(argv[1])
运行:$lua prog.lua arg1
(在脚本文件夹中运行)
你可以使用prong.lua:
#print(arg[1])
答案 4 :(得分:0)
对于OP和未来的访问者,
Lua的库不包含injecting a table 'args' into globals from command line switches
。由lua.c
构建的程序确实可以使用。无法使用的原因是该程序不喜欢多个开关。
这是构建我的REPL /代码执行器LuaConsole
的原因之一。它为您提供表args
并向元pcall函数发送元组(您的执行环境实际上是顶级pcall,可能附加了错误处理程序)。因此args[n]
和local a = {...}; a[n] ...;
都可以在任意数量的交换机上正常运行。例如,-e从cmd行执行代码,-l指定库,等等。它支持lua51及更高版本。
如果您在使用库中的程序时遇到麻烦,强烈建议您签出https://www.github.com/tilkinsc/LuaConsole,因为它可以使您免于处理感觉不佳的程序。还有其他替代方法,例如网络,fengari。
希望这对您有帮助!