y
y
yq
v4.x
Search
K

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 an 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