| 会员登录 立即注册

打印 上一主题 下一主题

用 Lua 解析参数

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2022-12-7 11:03:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2022-12-7 11:03:25 4264 0 看楼主


参数对于交互式计算至关重要,Lua 编程语言提供了 {...}表达式来封装在启动 Lua 脚本时给定的可变参数。

大多数计算机命令由两部分组成:命令和参数。命令是要执行的程序,而参数可能是命令选项或用户输入。如果没有这种结构,用户将不得不编辑命令的代码,以改变命令所处理的数据。想象一下重写 printf命令只是为了让你的计算机用 “hello world” 消息问候你。参数对于交互式计算至关重要,Lua 编程语言提供了{...}表达式来封装在启动 Lua 脚本时给定的可变参数。

在 Lua 中使用参数


几乎每一个给计算机的命令都假定一个参数,即使它期望参数是一个空列表。 Lua 会记录启动后写入的内容,即使你可能对这些参数不做任何操作。要在 Lua 启动时使用用户提供的参数,请迭代 {...}表:
local args = {...}for i,v in ipairs(args) do    print(v)end
运行代码:
$ lua ./myargs.lua$ lua ./myargs.lua foo --bar bazfoo--barbaz----
参数是不安全的,Lua 会完全按照输入的方式打印所有参数。

解析参数


对于简单的命令,Lua 的基本功能足以解析和处理参数。这是一个简单的例子:
-- setuplocal args = {...}-- enginefunction echo(p)   print(p)end-- gofor i,v in ipairs(args) do  print(i .. ": " .. v)endfor i,v in ipairs(args) do  if args == "--say" then    echo("echo: " .. args[i+1])  endend
在 setup部分,将所有命令参数转储到名为args的变量中。

在 engine部分,创建一个名为echo的函数,用于打印你“输入”其中的任何内容。

最后,在 go部分,解析args变量(用户在启动时提供的参数)中的索引和值。在此示例代码中,为清楚起见,第一个for循环仅打印每个索引和值。

第二个 for循环使用索引来检查第一个参数,它被假定是一个选项。此示例代码中唯一有效的选项是--say。如果循环找到字符串--say,它会调用echo函数,并将当前参数的索引加 1下一个参数)作为函数参数提供。

命令参数的分隔符是一个或多个空格。运行代码查看结果:
$ lua ./echo.lua --say zombie apocalypse1: --say2: zombie3: apocalypseecho: zombie
大多数用户都知道在向计算机发出命令时空格很重要,因此在这种情况下删除第三个参数是预期的行为。下面是演示两种有效“转义”方法的变体:
$ lua ./echo.lua --say "zombie apocalypse"1: --say2: zombie apocalypseecho: zombie apocalypse$ lua ./echo.lua --say zombie\ apocalypse1: --say2: zombie apocalypseecho: zombie apocalypse

解析参数


手动解析参数简单且无依赖性。但是,你必须考虑一些细节。大多数现代命令都允许使用短选项(例如,-f)和长选项(--foo),并且大多数命令都提供-h或--help或者在没有所需参数时显示帮助菜单。

使用 LuaRocks可以轻松安装其他库。有一些非常好的工具,例如alt-getopt,它们为解析参数提供了额外的基础设施。

via: https://opensource.com/article/22/11/lua-command-arguments

作者:Seth Kenlon选题:lkxed译者:geekpi校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

3AAA 当前离线
白银会员

查看:4264 | 回复:0

关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

苏公网安备 32038202000401号

快速回复 返回顶部 返回列表