Lumesh vs Bash 语法对比

wiki bash

Lumesh vs Bash 语法对比

一、基本概念对比

概念 Bash 语法 Lumesh 语法 说明
解释器声明 #!/bin/bash #!/usr/bin/env lumesh Lumesh 推荐使用 env 方式调用
注释 # 注释内容 # 注释内容 与 Bash 相同
续行符 \ \ 与 Bash 相同,但字符串内不需要续行符

二、变量操作对比

操作 Bash 语法 Lumesh 语法 说明
变量声明 var=value let var = value 空格可选,严格模式才必须声明
变量引用 $var${var} $var 或直接 var $可选,严格模式才必须$
多变量声明 不支持 let a, b = 1, 2
删除变量 unset var del var
延迟赋值 不支持 x := 2 + 3
类型检查 不支持 type var == "Integer"

三、数据类型对比

类型 Bash 处理方式 Lumesh 语法 说明
整数 declare -i var=10 let var = 10 自动分配类型
浮点数 不支持 let var = 10.0
字符串 str="hello" let str = "hello"
数组 arr=(1 2 3) let arr = [1, 2, 3]1...<3
字典 declare -A dict=([k]=v) let dict = {k: v}
范围 {1..10} 1..101..<10 属于基础数据类型,可参与运算
文件大小 字符串 200M 属于基础数据类型,可参与运算
时间 字符串 time.parse('2025-10-1') 属于基础数据类型,可参与运算

四、运算符对比

运算符 Bash 语法 Lumesh 语法 说明
算术运算 $((a + b)) a + b 直接运算
字符串连接 "$a$b" a + b 或 format(“a={}”,a) format是fmt.format的别名
相等比较 [ "$a" == "$b" ] a == ba ~= b 跨类型比较~=
包含检查 [[ "str" =~ "pattern" ]] str ~: 'pattern' 包含运算可用于数组,范围,字典,字符串
正则匹配 [[ "str" =~ "regex" ]] str ~~ 'regex' 有正则库regex可用

五、流程控制对比

结构 Bash 语法 Lumesh 语法 说明
if 语句 if [ cond ]; then ... fi if cond {...} else {...}
for 循环 for i in {1..3}; do ... done for i in 1..3 {...}
while 循环 while [ cond ]; do ... while cond {...}
case 语句 case $var in ... esac match var {...} Match 语句
repeat 循环 无直接对应 repeat 10 {...} repeat 循环,是list.map的别名
each 循环 无直接对应 `each {} [1..3] 是list.map的别名

六、函数对比

功能 Bash 语法 Lumesh 语法 说明
函数定义 func() { cmds; } fn func() {...}
匿名函数 let f = (x,y) -> x + y lambda表达式
函数参数 func() { $1,$2... } fn func(a,b) { a,b...} 形参列表
默认参数 不支持 fn f(a=1) {...} 默认参数
剩余参数 "$@" fn f(*args) {...} 剩余参数收集
函数调用 func a1 func(a1)func! a1
高阶函数 不直接支持 funcA(funcB) 函数作为参数
作用域 只支持全局作用域 函数具有隔离作用域

七、系统命令对比

操作 Bash 语法 Lumesh 语法 说明
命令执行 cmd cmd
后台运行 cmd & cmd &
关闭输出 cmd >/dev/null cmd &-
关闭错误 cmd 2>/dev/null cmd &?
管道 `cmd1 cmd2 ` `cmd1
重定向追加 cmd >> file cmd >> file 与Bash相同
重定向覆盖 cmd > file cmd >>! file

八、高级特性对比

特性 Bash 支持情况 Lumesh 支持情况 说明
隐式类型转换 自动转换数字和字符串
运算符重载 支持多种类型的加减乘除
矩阵运算 支持矩阵乘法
错误提示 粗略 细致 会提示行号和上下文及错误类型
错误处理 $?状态码检测 支持异常捕获、忽略、打印等 更便捷的异常处理机制
交互模式 支持 语法高亮,自动完成,AI辅助,按键绑定 增强的REPL 交互模式
内置Lib库 内置大量实用函数 参见Libs
结构化管道 支持`parse where

九、迁移建议

  1. 变量声明:从 var=value 可保持原样,远隔模式应将首次声明改为 let var = value
  2. 条件判断:从 [ "$a" == "$b" ] 改为 a == b$a == $b
  3. 循环语句:从 for i in {1..10} 改为 for i in 1..10
  4. 函数定义:从 func() {...} 改为 fn func() {...}
  5. 错误处理:从 cmd || fallback 可保持原样或改为 cmd ?: fallback

十、注意事项

  1. Lumesh 的数组索引从 0 开始(与 Bash 相同)
  2. 范围表达式 a..<b 不包含 b,a..b 包含 b
  3. 函数调用需要加 ()! 后缀
  4. 严格模式下必须使用 $ 前缀引用变量
  5. 运算符优先级与 Bash 有所不同,建议多用括号明确优先级

十一、学习资源

  1. 官方文档:Lumesh 语法手册
  2. 交互教程:运行 lumesh 进入 REPL 模式练习