The == and != operators matched the raw text of two scalars, so the same integer written in a different base never matched: `0x10 == 16`, `0o644 == 420` and `1_000 == 1000` were all false. This contradicted yq's own comparison operators, which parse those formats and agree the values are equal - for `0o644`, both `> 419` and `< 421` are true, yet `== 420` was false. It also contradicted the documented "Match number" behaviour of `==`. Give ==/!= the same !!int/!!int branch the comparison operators already have: parse both sides with the existing parseInt64 helper and compare the resulting int64s. If either side does not fit in an int64, fall back to the previous raw match rather than raising a new error. String globbing, floats and null handling are unchanged. Fixes #1977
154 lines
2.0 KiB
Markdown
154 lines
2.0 KiB
Markdown
# Equals / Not Equals
|
|
|
|
This is a boolean operator that will return `true` if the LHS is equal to the RHS and `false` otherwise.
|
|
|
|
```
|
|
.a == .b
|
|
```
|
|
|
|
It is most often used with the select operator to find particular nodes:
|
|
|
|
```
|
|
select(.a == .b)
|
|
```
|
|
|
|
The not equals `!=` operator returns `false` if the LHS is equal to the RHS.
|
|
|
|
## Related Operators
|
|
|
|
- comparison (`>=`, `<` etc) operators [here](https://mikefarah.gitbook.io/yq/operators/compare)
|
|
- boolean operators (`and`, `or`, `any` etc) [here](https://mikefarah.gitbook.io/yq/operators/boolean-operators)
|
|
- select operator [here](https://mikefarah.gitbook.io/yq/operators/select)
|
|
|
|
|
|
## Match string
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- cat
|
|
- goat
|
|
- dog
|
|
```
|
|
then
|
|
```bash
|
|
yq '.[] | (. == "*at")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
true
|
|
true
|
|
false
|
|
```
|
|
|
|
## Don't match string
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- cat
|
|
- goat
|
|
- dog
|
|
```
|
|
then
|
|
```bash
|
|
yq '.[] | (. != "*at")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
false
|
|
false
|
|
true
|
|
```
|
|
|
|
## Match number
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- 3
|
|
- 4
|
|
- 5
|
|
```
|
|
then
|
|
```bash
|
|
yq '.[] | (. == 4)' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
false
|
|
true
|
|
false
|
|
```
|
|
|
|
## Don't match number
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- 3
|
|
- 4
|
|
- 5
|
|
```
|
|
then
|
|
```bash
|
|
yq '.[] | (. != 4)' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
true
|
|
false
|
|
true
|
|
```
|
|
|
|
## Match number written in a different base
|
|
Integers are compared by value, so the hexadecimal and octal forms of 16 match the decimal form.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- 0x10
|
|
- 0o20
|
|
- 16
|
|
```
|
|
then
|
|
```bash
|
|
yq '.[] | (. == 16)' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
true
|
|
true
|
|
true
|
|
```
|
|
|
|
## Match nulls
|
|
Running
|
|
```bash
|
|
yq --null-input 'null == ~'
|
|
```
|
|
will output
|
|
```yaml
|
|
true
|
|
```
|
|
|
|
## Non existent key doesn't equal a value
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: frog
|
|
```
|
|
then
|
|
```bash
|
|
yq 'select(.b != "thing")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: frog
|
|
```
|
|
|
|
## Two non existent keys are equal
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: frog
|
|
```
|
|
then
|
|
```bash
|
|
yq 'select(.b == .c)' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: frog
|
|
```
|
|
|