运算符
rsh 支持以下常见的数学、逻辑和字符串操作的运算符:
| 运算符 | 描述 |
|---|---|
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
** |
指数 (幂) |
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 =~ ^rsh # returns all files whose names start with "rsh"
两个运算符都使用了
Rust regex 包的 is_match() 函数。
大小写敏感性
对字符串进行操作时,运算符通常是区分大小写的。有几种方法可以处理大小写不敏感的场景:
-
在正则表达式运算符中,指定
(?i)不区分大小写的模式修饰器:
"FOO" =~ "foo" # returns false
"FOO" =~ "(?i)foo" # returns true
-
使用
str contains命令的--insensitive标志:
"FOO" | str contains --insensitive "foo"
-
在比较前用
str downcase将字符串转换为小写:
("FOO" | str downcase) == ("Foo" | str downcase)