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..10 或 1..<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 == b 或 a ~= 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 |
九、迁移建议
- 变量声明:从
var=value
可保持原样,远隔模式应将首次声明改为let var = value
- 条件判断:从
[ "$a" == "$b" ]
改为a == b
或$a == $b
- 循环语句:从
for i in {1..10}
改为for i in 1..10
- 函数定义:从
func() {...}
改为fn func() {...}
- 错误处理:从
cmd || fallback
可保持原样或改为cmd ?: fallback
十、注意事项
- Lumesh 的数组索引从 0 开始(与 Bash 相同)
- 范围表达式
a..<b
不包含 b,a..b
包含 b - 函数调用需要加
()
或!
后缀 - 严格模式下必须使用
$
前缀引用变量 - 运算符优先级与 Bash 有所不同,建议多用括号明确优先级
十一、学习资源
- 官方文档:Lumesh 语法手册
- 交互教程:运行
lumesh
进入 REPL 模式练习