交互#
- 自动补全
- 可执行命令补全
- 路径补全
- 历史命令补全
![]() | ![]() |
|---|
- 细致的错误提示
| 语法错误提示 | 运行错误提示 |
|---|---|
![]() | ![]() |
语法高亮#
![]() | ![]() |
|---|
按键绑定#
用户可自定义快捷键绑定命令,例如:
alt + m 保存命令书签 | alt + x 用fzf搜索并执行书签 |
|---|---|
![]() | ![]() |
性能#
- 内存使用
| lume | fish |
|---|---|
![]() | ![]() |
| bash | dash |
![]() | ![]() |
- 循环测试
| lume | fish |
|---|---|
![]() | ![]() |
| bash | dash |
![]() | ![]() |
其中fish无法成功完成百万次循环
- 软件包大小(安装后)
| lume | bash | dash | fish | |
|---|---|---|---|---|
| 版本 | v0.3.8 | v5.2.037 | v0.5.12 | v4.0.2 |
| 体积 | 4.3 MB | 9.2 MB | 153.8 KiB | 21.64 MB |
- 测试结果
![]() | ![]() |
|---|
由于fish无法完成百万次任务,我们取值它完成一半任务的时间
语法#
语法友好易用。
- 直接数学运算
1 6 / 3
2 5 - 1
3 1+2^3*2- 变量
1let a = (2+3)*5
2print "a=" a
3
4let b,c = 1,2 # 支持多变量赋值
5println b c
6println(b,c) # 也可以- 数组/列表
1let arr = [10, "a", True]
2let arr_b = 0..10
3
4arr[0] # → 10
5arr_b.1
6
7# 切片操作
8arr[1:3] # → ["a", True](左闭右开)
9arr[::2] # → [10, True](步长2)
10arr[-1:] # → True(切片支持负数索引)
11
12# 复杂嵌套
13[1,24,5,[5,6,8]][3][1] # 显示6- 映射/字典
1let dict = {name: "Alice", age: 30}
2
3# 基础访问
4dict.name
5dict[name]- if条件语句
1if a>0 && b==0 {
2 print OK
3}else{
4 print BAD
5}- match匹配语句
1match a {
2 10 => print "ten",
3 20 => print "twenty" # 逗号是可选的
4 _ => print other
5}其他语句 同时支持 For, While, Loop 等循环语句. 条件赋值语句 a?b:c 延迟赋值语句
let a := b + clambda表达式
1let addone = x -> x+1
2let add = (x,y) -> x+y
3
4addone(2)
5add(3,4)function函数
支持高阶函数 支持函数嵌套 支持默认参数 支持剩余参数收集
1fn add(x,y=0,*other){ # =提供默认参数,*收集剩余参数
2 x+y+len(other)
3}
4
5add(3)
6add(3,4)
7add(3,4,5,6,7)- error catch
1let e = x -> print x
2
33 / 0 ?: e # 你可以使用函数来捕获和处理错误
4
53 / 0 ?. # 你也可以选择忽略它。
63 / 0 ?? # 你也可以选择在 错误输出 上显示它。
73 / 0 ?+ # 你也可以选择将其合并到 标准输出。
83 / 0 ?! # 你也可以选择将错误作为结果使用,这对错误重定向很有用
93 / 0 ?: 0 # 在失败时给出默认值错误捕获可以在表达式和整个函数声明中使用。
- 智能管道
智能管道可以自动适应输入和输出格式,智能支持字节管道和 结构化数据管道。
结构化管道示例 :
1
2ls -l | From.cmd() | where( int C4 > 4000 ) # 使用系统ls命令
3
4let thead = [mode,i,user,group,size,mday,mtime,name]
5ls -l | From.cmd(thead) | where(int size > 400) | select([name,size,mtime]) # 自定义转换表头
6
7Fs.ls -l | where(mode==420) | select(name) # 使用内置ls命令更多详细信息,请参见手册。

















