Redian新闻
>
用 Lua 解析参数 | Linux 中国

用 Lua 解析参数 | Linux 中国

科技
 
导读:参数对于交互式计算至关重要,Lua 编程语言提供了 {...} 表达式来封装在启动 Lua 脚本时给定的可变参数。
本文字数:2102,阅读时长大约:2分钟

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

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

在 Lua 中使用参数

几乎每一个给计算机的命令都假定一个参数,即使它期望参数是一个空列表。Lua 会记录启动后写入的内容,即使你可能对这些参数不做任何操作。要在 Lua 启动时使用用户提供的参数,请迭代 {...} 表:

  1. local args = {...}
  2. for i,v in ipairs(args) do
  3. print(v)
  4. end

运行代码:

  1. $ lua ./myargs.lua
  2. $ lua ./myargs.lua foo --bar baz
  3. foo
  4. --bar
  5. baz
  6. ----

参数是不安全的,Lua 会完全按照输入的方式打印所有参数。

解析参数

对于简单的命令,Lua 的基本功能足以解析和处理参数。这是一个简单的例子:

  1. -- setup
  2. local args = {...}
  3. -- engine
  4. function echo(p)
  5. print(p)
  6. end
  7. -- go
  8. for i,v in ipairs(args) do
  9. print(i .. ": " .. v)
  10. end
  11. for i,v in ipairs(args) do
  12. if args[i] == "--say" then
  13. echo("echo: " .. args[i+1])
  14. end
  15. end

在 setup 部分,将所有命令参数转储到名为 args 的变量中。

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

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

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

命令参数的分隔符是一个或多个空格。运行代码查看结果:

  1. $ lua ./echo.lua --say zombie apocalypse
  2. 1: --say
  3. 2: zombie
  4. 3: apocalypse
  5. echo: zombie

大多数用户都知道在向计算机发出命令时空格很重要,因此在这种情况下删除第三个参数是预期的行为。下面是演示两种有效“转义”方法的变体:

  1. $ lua ./echo.lua --say "zombie apocalypse"
  2. 1: --say
  3. 2: zombie apocalypse
  4. echo: zombie apocalypse
  5. $ lua ./echo.lua --say zombie\ apocalypse
  6. 1: --say
  7. 2: zombie apocalypse
  8. echo: zombie apocalypse

解析参数

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

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


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

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

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

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1827.5 篇
|
贡献: 3329 天
2013-10-25
2022-12-06
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何通过 chroot 恢复 Arch Linux 安装 | Linux 中国如何在最小安装的 CentOS、RHEL、Rocky Linux 中设置互联网 | Linux 中国文艺界(文革前)谁年纪最轻,工资级别最高?解决 Linux 中的 “Bash: Command Not Found” 报错 | Linux 中国Rhino Linux:滚动发布但也很稳定的 Ubuntu | Linux 中国LURE 初窥!将 AUR 带入所有 Linux 发行版 | Linux 中国某顶级事务所的LUMION特效参数流出?网友:出图就这么简单?(附参数下载)如何在 Ubuntu Linux 上更新谷歌 Chrome | Linux 中国bāo huā shēng?bō huā shēng?如何在 Ubuntu 和其他 Linux 中检查 CPU 和硬盘温度 | Linux 中国如何在 Ubuntu 和其他相关 Linux 中安装 Python 3.10 | Linux 中国System 76 将不会发布 Pop!_OS 22.10 Linux 发行版 | Linux 中国使用这个多功能的 Linux 命令转换音频文件 | Linux 中国Linux Mint 的更新管理器现在支持 Flatpak | Linux 中国使用 Lua 解析配置文件 | Linux 中国季节刚好,红叶正艳如何在 Linux 中确定运行的是那种初始化系统 | Linux 中国Arch Linux 中用于包管理的图形化应用 | Linux 中国13 个从头开始构建的独立 Linux 发行版 | Linux 中国两周年的纪念如何在 Ubuntu 等 Linux 中安装 Python 3.11 | Linux 中国如何在 Silverblue 上变基到 Fedora Linux 37 | Linux 中国美国入境档案--马一浮1903年旧金山使用 PSCP 将文件和文件夹从 Windows 传输到 Linux | Linux 中国Rosalía 登意大利版《VOGUE》封面!在你的 Linux 终端中玩经典的贪吃蛇游戏 | Linux 中国在 Linux 中如何从命令行查找默认网关的 IP 地址 | Linux 中国准备好在 Debian Linux 上获得 Ubuntu MATE 的体验吧! | Linux 中国打造万圣节 Linux 桌面 | Linux 中国开源朗读者:使用 Linux 的优势和劣势 | Linux 中国在 Linux 中创建 LVM 分区的分步指南 | Linux 中国12 个对新手最重要的 Linux 命令 | Linux 中国如何在 Arch Linux 中启用 Snap 支持 | Linux 中国如何提高 Ubuntu 和其他 Linux 系统中的扬声器音量 | Linux 中国2022庭院:菜篮子(08/20-10/07)
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。