跳过正文
  1. Lumesh 文档/
  2. 语法/

语法:参数与环境变量

1136 字·3 分钟
目录

命令行参数
#

参数通过 argv 列表访问

  • 脚本参数
1lumesh script.lm Alice tom
2# in script.lm
3print argv  # 输出 "[Alice, tom]"
4print argv[0]  # 输出 "Alice"
  • 命令行传参
1lume -c 'print argv' -- a b   # 或
2lume -c 'print argv' a b
3# 输出
4[a, b]

环境变量
#

系统环境变量
#

  • Sys.env() 列出系统环境变量
1set var value    # 设置系统环境变量
2unset var        # 删除系统环境变量

典型系统变量:

1PATH             #系统环境变量
2HOME             #系统环境变量

当前环境变量
#

  • Sys.vars() 列出当前环境变量
1let var value    # 设置当前环境变量
2del var          # 删除当前环境变量

Lumesh定义的当前环境变量:

1env              #列出所有当前环境变量
2IS_LOGIN         #是否LOGIN-SHELL
3IS_INTERACTIVE   #是否交互模式
4IS_STRICT        #是否严格模式

IFS
#

这是一个特殊的环境变量,用于内部字段分割。

  • IFS功能控制的三种状态行为表格
掩码语法类型掩码功能位未启用启用但IFS值未设置启用且IFS值已设置
2命令字符串参数将整个字符串作为单个参数传递使用换行符作为默认分隔符使用IFS值作为分隔符分割
4for循环/循环派发管道分割依次尝试按行、空格、分号、逗号分割依次尝试按行、空格、分号、逗号分割使用IFS值分割字符串
8String.split函数使用空白符分割(split_whitespace)使用空格(" ")作为默认分隔符使用IFS值作为分隔符
16From.csv/Into.csv函数使用逗号(",")作为CSV分隔符使用逗号(",")作为默认分隔符使用IFS值的首字符作为CSV分隔符*
32Ui.pick函数使用换行符("\n")分割选项使用换行符("\n")作为默认分隔符使用IFS值分割选项列表

*注:CSV函数有特殊处理,如果IFS设置为"\n",仍使用逗号作为分隔符。

  • 控制逻辑流程
  1. 第一层检查:通过 检查 LUME_IFS_MODE 位掩码是否启用对应功能
  2. 第二层检查:如果功能已启用,检查 IFS 变量是否设置为有效字符串值
  3. 第三层执行:根据检查结果执行相应的分割逻辑

这种三层控制设计提供了最大的灵活性和向后兼容性。系统初始化时会确保IFS变量存在。

  • 配置说明

  • LUME_IFS_MODE: 位掩码,控制哪些语法使用IFS

  • IFS: 实际的分隔符字符串

  • 默认值: LUME_IFS_MODE默认为2,只影响命令参数分割

  • 使用示例

要启用所有IFS功能,可以设置:

1let LUME_IFS_MODE = 62  # 2+4+8+16+32 = 62,启用所有功能

要只启用特定功能的组合,可以将对应的位值相加。例如:

  • 只启用命令参数和字符串分割:LUME_IFS_MODE = 10 (2+8)
  • 启用for循环和CSV解析:LUME_IFS_MODE = 20 (4+16)

IFS(Internal Field Separator)是一个shell概念,在Lumesh中被实现为可配置的字符串分割机制。通过位掩码系统,用户可以精确控制哪些语法上下文使用IFS分割,哪些使用默认行为。这种设计提供了向后兼容性,同时允许用户根据需要自定义字符串处理行为。

相关文章