运算符

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

正则表达式 / 字符串包含运算符

=~!~运算符提供了一种更方便的方法来评估 正则表达式open in new window。你不需要知道正则表达式就可以使用它们 —— 它们也是检查一个字符串是否包含另一个的简单方法:

  • 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() 函数open in new window

大小写敏感性

对字符串进行操作时,运算符通常是区分大小写的。有几种方法可以处理大小写不敏感的场景:

  1. 在正则表达式运算符中,指定(?i)不区分大小写的模式修饰器:
"FOO" =~ "foo" # returns false
"FOO" =~ "(?i)foo" # returns true
  1. 使用str contains 命令的--insensitive标志:
"FOO" | str contains --insensitive "foo"
  1. 在比较前用str downcase将字符串转换为小写:
("FOO" | str downcase) == ("Foo" | str downcase)