介绍
作为 Shell 语言, 我特别喜欢 Nushell 的如下几个特点:
- 来自 UNIX Shell 的管道, 把多个命令连接在一起
- 函数式编程风格
事实上, 管道操作符 (|) 也是很多函数式编程的操作符
- 丰富的对象化的数据结构
- 对结构化文件的处理, 比如 JSON, XML, CSV, TOML 等
- 基于模板的字符串解析
- 在线帮助
- 输出结果是彩色的, 而且是表格化的, 还自带编号 ! 真贴心 !
- Footprint 很小, 安装后 < 30M (0.85 版本)
本文内容大多数来自 http://www.nushell.sh/zh-CN/book/ (文中简称 book), 但是也有很多我自己的理解.
鉴于 book 中, 已经把 Nushell 的介绍和使用说的非常详细了, 本文不打算重复或抄录其内容, 更多是补充和总结.
基础知识
1. 数据类型
关于 Nushell 的数据类型, 这里强调和补充几个要点:
- 可以用 describe 命令来获得前一个管道输出的数据类型描述
比如 ls | describe, 就可以知道 ls 输出的 table 的表头的名称和类型, 在编写后面的语句时, 能参考这些名字
- 可以用 into <type> 来把前一个管道输出的数据类型转换成当前引用的数据类型
- 字符串可以用单引号, 也可以用双引号, 两者稍有不同
- 字符串也可以不用任何引号, 这叫裸字符串. 比引号更好的地方在于, 裸串不需要转义
例如:
open d:\tmp\aa.txt
对比:
open "d:\\tmp\\aa.txt"
- null 是特殊的,内定的数据, 表示 "没数据/未定义", 类似 C 中的 void, C# 中的 null, 或 Python 中的 None.
例如下面语句中的 null
[[meal size]; [arepa, null] ] | is-empty meal # false
对比:
- 区间还可以用负数表示, 但是需要加上括号, 否则容易引起编译器误解. 例如下面的语句:
'abcd12345678' | str substring (-5..-2) #456
(-5..-2) 的意思是, 从倒数第五开始, 到倒数第二结束.
也可以省略区间的结尾. 比如:
(-3..) 意思是, 从倒数第三个位置开始取, 直到末尾. 即等于 (-3, -2, -1)
这个设计理念应该是从 Python 借用过来的.
负数区间在切片时非常有用
- 用字符串的 parse 命令, 可以把一个字符串解释成若干列. 这个 "按模式切片" 的功能, 真是日志分析的利器.
2. 变量
- Nu 中的变量,其实是 "常量", 一旦赋值后就不允许修改
- 与常规编程语言类似, 变量有作用域, 子域可以使用同名变量, 不会覆盖父域的同名变量
- 变量支持路径.
比如
prrint $val.name
print $val.name
3) 子表达式
* 可以通过圆括号 () 来执行一个子表达式并使用其结果.
例如 (ls)
* 子表达式也支持路径
例如 (ls).name
* 子表达式可以简化
ls | where size > 10kb
其实是简化的子表达式. 完整的语法应该是
ls | where {|it| $it.size > 10k}
上述语法也可以部分简化成:
ls | where $it.size > 10k
ls | where ($it.size > 10k)
* 简化后的子表达式, 路径名必须写在前面.
以下语句非法:
ls | where size > 10k
但以下语句合法:
ls | where 10k < $it.size
ls | where (10k < $it.size)
ls 命令介绍
列表 (list) 及处理
字符串及处理
path 命令
系统命令
常用的 Filter 命令
系统或平台相关的命令
核心命令
几个综合应用的例子
标签:总结,10k,Nushell,数据类型,说明,ls,字符串,where,size From: https://www.cnblogs.com/yun-dicom/p/17772956.html