Nushell
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • 简介
  • 安装
    • 默认 Shell
  • 快速入门
    • 快速入门
    • 在系统中四处移动
    • 用 Nu 的方式思考
    • Nushell 速查表
  • Nu 基础篇
    • 数据类型
    • 加载数据
    • 管道
    • 处理字符串
    • 处理列表
    • 处理记录(Records)
    • 处理表格
    • 导航和访问结构化数据
    • 特殊变量
  • Nushell 编程
    • 自定义命令
    • 别名
    • 运算符
    • 变量
    • 控制流
    • 脚本
    • 模块
      • 使用模块
      • 创建模块
    • 覆层
    • 排序
    • 测试你的 Nushell 代码
    • 最佳实践
  • Nu 作为 Shell 使用
    • 配置
    • 环境
    • 标准输入、输出和退出码
    • 运行系统(外部)命令
    • 如何配置第三方提示
    • 目录栈
    • Reedline,Nu 的行编辑器
    • 自定义补全
    • 外部命令
    • Nu 的配色和主题
    • 钩子
    • 后台任务
  • 迁移到 Nu
    • 从 Bash 到 Nu
    • 从 CMD.EXE 到 Nu
    • 从其他 Shell 或 DSL 到 Nu
    • 从命令式语言到 Nu
    • 从函数式语言到 Nu
    • Nushell 运算符
  • 设计说明
    • Nushell代码执行原理
  • (不怎么)高级篇
    • 标准库 (预览版)
    • Dataframes
    • 元数据
    • 创建你自己的错误
    • 并行
    • 插件
    • explore

数据类型

传统的 Unix shell 命令通过文本字符串进行通信 - 一个命令将文本写入标准输出(stdout),另一个命令从标准输入(stdin)读取文本。这种机制允许多个命令通过"管道"组合在一起。

Nushell 继承了这种方法,并扩展支持除字符串外的其他数据类型。

像许多编程语言一样,Nu 使用一组简单和结构化的数据类型对数据进行建模。简单数据类型包括整数、浮点数、字符串和布尔值。还有日期、文件大小和时间间隔等特殊类型。

describe 命令可以返回数据的类型:

42 | describe
# => int

数据类型概览

类型示例
整数-65535
浮点数9.9999, Infinity
字符串"第18洞", '第18洞', `第18洞`, 第18洞, r#'第18洞'#
布尔值true
日期2000-01-01
时间间隔2min + 12sec
文件大小64mb
区间0..4, 0..<5, 0.., ..4
二进制数据0x[FE FF]
列表[0 1 '二' 3]
记录{name:"Nushell", lang: "Rust"}
表格[{x:12, y:15}, {x:8, y:9}], [[x, y]; [12, 15], [8, 9]]
闭包{|e| $e + 1 | into string }, { $in.name.0 | path exists }
单元格路径$.name.0
代码块if true { print "你好!" }, loop { print "按ctrl-c退出" }
空值null
任意类型let p: any = 5

基础数据类型

整数

描述:没有小数部分的数字(正数、负数和0)
类型标注:int
字面量语法:十进制、十六进制、八进制或二进制数值,不带小数点。如-100, 0, 50, +50, 0xff(十六进制), 0o234(八进制), 0b10101(二进制)
参见:语言参考 - 整数

简单示例:

10 / 2
# => 5
5 | describe
# => int

浮点数

描述:带有小数部分的数字
类型标注:float
字面量语法:包含小数点的十进制数值。如1.5, 2.0, -15.333
参见:语言参考 - 浮点数

简单示例:

2.5 / 5.0
# => 0.5

提示

与大多数编程语言一样,Nushell中的浮点数是近似值。

10.2 * 5.1
# => 52.01999999999999

字符串

描述:表示文本的字符序列
类型标注:string
字面量语法:参见字符串处理
参见:处理字符串
语言参考 - 字符串

Nushell提供了多种表示字符串的方式和许多处理字符串的命令。

简单示例:

let audience: string = "World"
$"Hello, ($audience)"
# => Hello, World

布尔值

描述:真或假值
类型标注:bool
字面量语法:字面量true或false
参见:语言参考 - 布尔值

布尔值通常是比较的结果。例如:

let mybool: bool = (2 > 1)
$mybool
# => true
let mybool: bool = ($env.HOME | path exists)
$mybool
# => true

布尔结果常用于控制执行流程:

let num = -2
if $num < 0 { print "It's negative" }
# => It's negative

日期

描述:使用国际标准日期时间描述符表示特定时间点
类型标注:datetime
字面量语法:参见语言指南 - 日期

简单示例:

date now
# => Mon, 12 Aug 2024 13:59:22 -0400 (now)
# 格式化为Unix时间戳
date now | format date '%s'
# => 1723485562

时间间隔

描述:表示时间段的单位
类型标注:duration
字面量语法:参见语言参考 - 时间间隔

时间间隔支持分数值和计算。

简单示例:

3.14day
# => 3day 3hr 21min
30day / 1sec  # How many seconds in 30 days?
# => 2592000

文件大小

描述:表示文件大小或字节数的特殊数值类型
类型标注:filesize
字面量语法:参见语言参考 - 文件大小

Nushell支持分数文件大小和计算:

0.5kB
# => 500 B
1GiB / 1B
# => 1073741824
(1GiB / 1B) == 2 ** 30
# => true

区间

描述:描述从起始值到结束值的数值范围,可选步长
类型标注:range
字面量语法:<起始值>..<结束值>。例如1..10
<起始值>..<第二个值>..<结束值>。例如2..4..20
参见:语言指南 - 区间

简单示例:

1..5
# => ╭───┬───╮
# => │ 0 │ 1 │
# => │ 1 │ 2 │
# => │ 2 │ 3 │
# => │ 3 │ 4 │
# => │ 4 │ 5 │
# => ╰───┴───╯

提示

你也可以用 seq char 命令以类似区间的方式轻松创建字符列表,以及用 seq date 命令创建日期列表。

单元格路径

描述:用于导航到结构化值内部值的表达式
类型标注:cell-path
字面语法:行号(整数)和列名(字符串)的点分隔列表。例如name.4.5
需要时可以使用前导$.消除歧义,例如将单元格路径赋值给变量时
参见:语言参考 - 单元格路径
导航和访问结构化数据章节

简单示例:

let cp = $.2
# 返回索引2处的列表项
[ foo bar goo glue ] | get $cp
# => goo

闭包

描述:匿名函数,通常称为lambda函数,它接受参数并"闭合"(即使用)其作用域外的变量
类型标注:closure
字面量语法:{|参数| 表达式 }
参见:语言参考 - 闭包

简单示例:

此闭包返回比较的布尔结果,然后在where命令中使用它返回所有大于5的值。

let compare_closure = {|a| $a > 5 }
let original_list = [ 40 -4 0 8 12 16 -16 ]
$original_list | where $compare_closure
# => ╭───┬────╮
# => │ 0 │ 40 │
# => │ 1 │  8 │
# => │ 2 │ 12 │
# => │ 3 │ 16 │
# => ╰───┴────╯

二进制数据

描述:表示二进制数据
类型标注:binary
字面量语法:0x[ffffffff] - 基于十六进制的二进制表示
0o[1234567] - 基于八进制的二进制表示
0b[10101010101] - 基于二进制的二进制表示
参见:语言指南 - 二进制

二进制数据,如图像文件的数据,是一组原始字节。

简单示例 - 确认JPEG文件以正确的标识符开头:

open nushell_logo.jpg
| into binary
| first 2
| $in == 0x[ff d8]
# => true

结构化数据类型

Nushell包含一组可以包含上述基本类型的结构化数据类型。例如,结构化数据为我们提供了一种在同一值中表示多个浮点值的方法,比如温度读数列表。Nushell支持以下结构化数据类型:

列表

描述:零个或多个任意类型值的有序序列
类型标注:list
字面量语法:参见语言指南 - 列表
参见:使用列表
导航和访问结构化数据

简单示例:

[张三 李四 王五]
# => ╭───┬──────╮
# => │ 0 │ 张三 │
# => │ 1 │ 李四 │
# => │ 2 │ 王五 │
# => ╰───┴──────╯

记录

描述:保存键值对,将字符串键与各种数据值关联
类型标注:record
字面量语法:参见语言指南 - 记录
参见:使用记录
导航和访问结构化数据

简单示例:

let my_record = {
  name: "张三"
  rank: 99
}
$my_record
# => ╭───────┬────────────╮
# => │ name  │ 张三       │
# => │ rank  │ 99         │
# => ╰───────┴────────────╯

$my_record | get name
# => 张三

表格

描述:具有行和列的二维容器,每个单元格可以保存任何基本或结构化数据类型
类型标注:table
参见:使用表格
导航和访问结构化数据
语言指南 - 表格

表格是Nushell中的核心数据结构。运行命令时,你会发现许多命令返回表格作为输出。表格有行和列。

提示

内部表格只是记录列表。这意味着任何提取或隔离表格特定行的命令都会产生记录。例如,get 0在列表上使用时提取第一个值。但在表格(记录列表)上使用时,它提取一条记录:

[{x:12, y:5}, {x:3, y:6}] | get 0
# => ╭───┬────╮
# => │ x │ 12 │
# => │ y │ 5  │
# => ╰───┴────╯

其他数据类型

任意类型

描述:用于类型标注或签名时,匹配任何类型。换句话说,是其他类型的"超集"
类型标注:any
字面语法:N/A - 任何字面值都可以赋值给any类型
参见:语言参考 - 任意类型

代码块

描述:一些Nushell关键字(如if和for)使用的语法形式
类型标注:N/A
字面量语法:N/A
参见:语言参考 - 代码块

简单示例:

if true { print "It's true" }

上面的{ print "It's true" }部分就是一个代码块。

空值

描述:nothing类型用于表示另一个值的缺失
类型标注:nothing
字面量语法:null
参见:语言参考 - 空值

简单示例

使用可选操作符?会在请求的单元格路径不存在时返回null:

let simple_record = { a: 5, b: 10 }
$simple_record.a?
# => 5
$simple_record.c?
# => Nothing is output
$simple_record.c? | describe
# => nothing
$simple_record.c? == null
# => true
在GitHub上编辑此页面
Contributors: Ibraheem Ahmed, sholderbach, Justin Ma, Stefan Holderbach, Tomochika Hara, Hofer-Julian, hanjunghyuk, CAESIUS-TIM, Bruce Weirdan, 0x4D5352, Jan Klass, voyage200🍬
Next
加载数据