# 数据类型
通常,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/bin
和 C:\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 }
。块在表示对数据的每一行执行的代码时非常有用。