Files
mikefarah-yq/pkg/yqlib/doc/operators/equals.md
T
dualfroz 699d0e35c0 fix(equals): compare integers by value, not by raw text
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
2026-09-03 13:29:22 +02:00

2.0 KiB

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.

  • comparison (>=, < etc) operators here
  • boolean operators (and, or, any etc) here
  • select operator here

Match string

Given a sample.yml file of:

- cat
- goat
- dog

then

yq '.[] | (. == "*at")' sample.yml

will output

true
true
false

Don't match string

Given a sample.yml file of:

- cat
- goat
- dog

then

yq '.[] | (. != "*at")' sample.yml

will output

false
false
true

Match number

Given a sample.yml file of:

- 3
- 4
- 5

then

yq '.[] | (. == 4)' sample.yml

will output

false
true
false

Don't match number

Given a sample.yml file of:

- 3
- 4
- 5

then

yq '.[] | (. != 4)' sample.yml

will output

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:

- 0x10
- 0o20
- 16

then

yq '.[] | (. == 16)' sample.yml

will output

true
true
true

Match nulls

Running

yq --null-input 'null == ~'

will output

true

Non existent key doesn't equal a value

Given a sample.yml file of:

a: frog

then

yq 'select(.b != "thing")' sample.yml

will output

a: frog

Two non existent keys are equal

Given a sample.yml file of:

a: frog

then

yq 'select(.b == .c)' sample.yml

will output

a: frog