yq/pkg/yqlib/doc/operators/boolean-operators.md
2023-05-28 14:22:48 +10:00

3.7 KiB

Boolean Operators

The or and and operators take two parameters and return a boolean result.

not flips a boolean from true to false, or vice versa.

any will return true if there are any true values in a array sequence, and all will return true if all elements in an array are true.

any_c(condition) and all_c(condition) are like any and all but they take a condition expression that is used against each element to determine if it's true. Note: in jq you can simply pass a condition to any or all and it simply works - yq isn't that clever..yet

These are most commonly used with the select operator to filter particular nodes.

  • equals / not equals (==, !=) operators here
  • comparison (>=, < etc) operators here
  • select operator here

or example

Running

yq --null-input 'true or false'

will output

true

"yes" and "no" are strings

In the yaml 1.2 standard, support for yes/no as booleans was dropped - they are now considered strings. See '10.2.1.2. Boolean' in https://yaml.org/spec/1.2.2/

Given a sample.yml file of:

- yes
- no

then

yq '.[] | tag' sample.yml

will output

!!str
!!str

and example

Running

yq --null-input 'true and false'

will output

false

Matching nodes with select, equals and or

Given a sample.yml file of:

[{a: bird, b: dog}, {a: frog, b: bird}, {a: cat, b: fly}]

then

yq '[.[] | select(.a == "cat" or .b == "dog")]' sample.yml

will output

- {a: bird, b: dog}
- {a: cat, b: fly}

any returns true if any boolean in a given array is true

Given a sample.yml file of:

[false, true]

then

yq 'any' sample.yml

will output

true

any returns false for an empty array

Given a sample.yml file of:

[]

then

yq 'any' sample.yml

will output

false

any_c returns true if any element in the array is true for the given condition.

Given a sample.yml file of:

a:
  - rad
  - awesome
b:
  - meh
  - whatever

then

yq '.[] |= any_c(. == "awesome")' sample.yml

will output

a: true
b: false

all returns true if all booleans in a given array are true

Given a sample.yml file of:

[true, true]

then

yq 'all' sample.yml

will output

true

all returns true for an empty array

Given a sample.yml file of:

[]

then

yq 'all' sample.yml

will output

true

all_c returns true if all elements in the array are true for the given condition.

Given a sample.yml file of:

a:
  - rad
  - awesome
b:
  - meh
  - 12

then

yq '.[] |= all_c(tag == "!!str")' sample.yml

will output

a: true
b: false

Not true is false

Running

yq --null-input 'true | not'

will output

false

Not false is true

Running

yq --null-input 'false | not'

will output

true

String values considered to be true

Running

yq --null-input '"cat" | not'

will output

false

Empty string value considered to be true

Running

yq --null-input '"" | not'

will output

false

Numbers are considered to be true

Running

yq --null-input '1 | not'

will output

false

Zero is considered to be true

Running

yq --null-input '0 | not'

will output

false

Null is considered to be false

Running

yq --null-input '~ | not'

will output

true