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 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.
Related Operators
- 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