跳过正文
  1. 惊鸿一瞥/

Lumesh vs Bash 语法对比

1440 字·3 分钟
目录

观看幻灯片演示
#

一、基本概念对比
#

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

二、变量操作对比
#

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

Bash变量通常需要双引号,才能避免空值导致的语法错误。

三、数据类型对比
#

类型Bash 处理方式Lumesh 语法说明
整数declare -i var=10let 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属于基础数据类型,可参与运算
时间字符串r'2025-10-1'属于基础数据类型,可参与运算

四、运算符对比
#

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

Bash比较需要双引号,才能避免空值导致的语法错误。

五、流程控制对比
#

结构Bash 语法Lumesh 语法说明
if 语句if [ cond ]; then ... fiif cond {...} else {...}更简洁
for 循环for i in {1..3}; do ... donefor i in 1..3 {...}更简洁
while 循环while [ cond ]; do ... donewhile cond {...}更简洁
case 语句case $var in; a) a_cmd;; ... esacmatch var { a => a_cmd...}Match 语句更简洁,且支持正则
repeat 循环无直接对应repeat 10 {...}repeat 循环,是list.map的别名
each 循环无直接对应`each {} [1..3]是list.map的别名

六、函数对比
#

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

Bash没有函数形参,只能使用位置参数$1...,如传递了位置参数,将覆盖脚本级参数。

六、脚本参数
#

功能Bash 语法Lumesh 语法说明
参数"$1" "$2" ...argv[0] argv[1]
所有参数"$@"argv
参数数量"$#"argv.len()

七、系统命令对比
#

操作Bash 语法Lumesh 语法说明
命令执行cmdcmd
后台运行cmd &cmd &
关闭输出cmd >/dev/nullcmd &-
关闭错误cmd 2>/dev/nullcmd &?
管道cmd1 | cmd2`cmd1 | cmd2与Bash相同,但支持结构化数据流
重定向追加cmd >> filecmd >> file与Bash相同
重定向覆盖cmd > filecmd >! file

八、高级特性对比
#

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

九、迁移建议
#

  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 模式练习

相关文章