运算符
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)