# 数据类型

通常,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

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

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

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

Duration Length 中文
1sec one second 一秒
1min one minute 一分
1hr one hour 一时
1day one day 一日
1wk one week 一周
1mon one month 一月
1yr one year 一年

# 范围 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 }。块在表示对数据的每一行执行的代码时非常有用。