# 数据类型

通常,Unix Shell 命令用文本字符串来相互交流。一个命令需要通过标准输出(通常称为 'stdout')输出文本,然后另一个将会从标准输入(通常称为 'stdin')来读取文本。用这种方法,两个命令相互交流。

我们可以反思一下这种基于字符串的交流方式。

Nu 在其命令中采用了这种方法,并将其扩展为包括其他类型的数据。 目前,Nu 支持两种数据类型:简单数据和结构化数据。

# 简单数据

就像大多数编程语言一样, Nu 使用一组简单的和结构化的数据类型对数据建模。简单数据类型包含整数、浮点数、字符串、布尔数、日期和路径。它同样包含一个用来表示文件大小的特殊类型。

# 整数 Integers

整数(或舍入)数字,例如 1、5、100。

# 实数 Decimal

实数是具有小数部分的数字。例如 1.5、2.0 和 15.333。

# 字符串 Strings

字符串是用来表示文本的基本方法。它们使用一对双引号包括。例如 "Rust"、"myname.txt" 和 "中华人民共和国"。

Nu 中的字符串默认支持 Unicode,所以你可以轻松传递 UTF-8 文本。

# 行 Lines

Lines 是隐式带有依赖操作系统的换行符的字符串。

# 列路径 Column paths

列路径是用来指定表中特定子表、列、行或单元格的路径。

例如, open data.toml | get foo.0.bar 中的 foo.0.bar

# 模式 Patterns

模式,有时候也叫通配符模式,是一种经常在 Shell 中用来匹配文件名的方法。包含 * 的通配符意味着匹配任何字串,? 表示匹配一个单个的字符。 例如 ls test* 中的 test* 就是一个模式。

# 布尔数 Booleans

布尔数只有 真 或 假 两种状态。比起直接书写值,它通常作为一次比较的结果。

它的两种值分别为 $true$false

# 日期 Dates

日期和时间通过 Date 类型来控制。Date 值是依赖于时区的,默认使用 UTC 时区。

# 持续时间 Duration

持续时间表示一定长度的时间段。一秒、五周、一年等等都是持续时间。

例如 1wk 表示 one week,即一周。

这个表显示了目前支持的时间单位:

Duration Length 中文
1sec one second 一秒
1min one minute 一分
1hr one hour 一时
1day one day 一日
1wk one week 一周

# 范围 Ranges

你可以用它来表示一个范围的数值。它所描述的区间是闭区间,1..4 表示 1,2,3,4

例如 ls | range 1..4

# 路径 Paths

路径是与平台相关的一种表示文件路径的方法。例如 /usr/binC:\Users\file.txt

# 字节量 Bytes

文件大小使用一种名为字节量的特殊整数描述。例如 100, 15kb, 100mb 等。

# 二进制数据 Binary data

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

# 结构化数据

结构化数据是根据简单数据构建的。 例如,结构化数据提供了一种表示同一值中多个整数的方法,而不是单个整数。 当前支持的结构化数据类型有:行,列表和块。

# 行 Rows

行数据类型表示你将在表中的一行数据中看到的内容。 它具有不同的数据元素,并且每个数据元素都有一个列名。

# 列表 Lists

列表持有多于一个的值,它们可以是简单数据,也可以是行。列表和行的组合通常也被称为表。

例如,一列字符串:

> echo [sam fred george]
───┬────────
 0 │ sam
 1 │ fred
 2 │ george
───┴────────

# 块 Blocks

块表示 Nu 的一个代码块。例如,在命令 each { echo $it } 中,块是花括号所包含的部分 { echo $it }。块在表示对数据的每一行执行的代码时非常有用。