运算符
Nushell 支持以下常见的数学、逻辑和字符串操作的运算符:
| 运算符 | 描述 |
|---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
** | 指数 (幂) |
mod | 取模 |
== | 等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
=~ | 正则匹配 / 字符串包含另一个字符串 |
!~ | 正则不匹配 / 字符串不包含另一个 |
in | 列表包含值 |
not-in | 列表不包含值 |
not | 逻辑取反 |
&&, and | 两个布尔值与运算 |
||, or | 两个布尔值或运算 |
// | 整除并向下取整 |
** | 幂运算 |
bit-or | 按位或 |
bit-xor | 按位异或 |
bit-and | 按位与 |
bit-shl | 按位左移 |
bit-shr | 按位右移 |
starts-with | 字符串开始检测 |
ends-with | 字符串结尾检测 |
圆括号可用于分组以指定求值顺序,或用于调用命令并在表达式中使用结果。
运算符结合顺序
数学运算的结合顺序如下(从最高优先级到最低):
- 圆括号 (
()) - 乘 (
*) 、 除 (/) 和幂 (**) - 加 (
+) 和减 (-)
> 3 * (1 + 2)
9正则表达式 / 字符串包含运算符
=~和!~运算符提供了一种更方便的方法来评估 正则表达式。你不需要知道正则表达式就可以使用它们 —— 它们也是检查一个字符串是否包含另一个的简单方法:
string =~ pattern如果string包含pattern的匹配返回 true, 反之返回 false;string !~ pattern如果string包含pattern的匹配返回 false, 反之返回 true;
例如:
foobarbaz =~ bar # returns true
foobarbaz !~ bar # returns false
ls | where name =~ ^nu # returns all files whose names start with "nu"两个运算符都使用了 Rust regex 包的 is_match() 函数。
大小写敏感性
对字符串进行操作时,运算符通常是区分大小写的。有几种方法可以处理大小写不敏感的场景:
- 在正则表达式运算符中,指定
(?i)不区分大小写的模式修饰器:
"FOO" =~ "foo" # returns false
"FOO" =~ "(?i)foo" # returns true- 使用
str contains命令的--ignore-case标志:
"FOO" | str contains --ignore-case "foo"- 在比较前用
str downcase将字符串转换为小写:
("FOO" | str downcase) == ("Foo" | str downcase)