Value Parsing
How values are parsed from the CLI to commands that create/update yaml (e.g. new/write).
yq attempts to parse values intelligently, e.g. when a number is passed it - it will assume it's a number as opposed to a string. yq will not alter the representation of what you give. So if you pass '03.0' in, it will assume it's a number and keep the value formatted as it was passed in, that is '03.0'.
The --tag flag can be used to override the tag type to force particular tags.
Default behavior
Integers
Given
yq new key 3results in
key: 3Given a formatted number
yq new key 03results in
key: 03yq keeps the number formatted as it was passed in.
Float
Given
yq new key "3.1"results in
key: 3.1Note that quoting the number does not make a difference.
Given a formatted decimal number
yq new key 03.0results in
key: 03.0yq keeps the number formatted as it was passed in
Booleans
Note that yq supports yaml spec 1.2 - which means the values yes/no are no longer parsed as booleans, but as strings see https://yaml.org/spec/1.2/spec.html and https://github.com/go-yaml/yaml/tree/v3 for more information.
yq new key trueresults in
key: trueNulls
yq new key nullresults in
key: nullyq new key '~'results in
key: ~yq new key ''results in
key:Strings
yq new key whateverresults in
key: whateveryq new key ' whatever 'results in
key: ' whatever 'Using the tag flag to cast
Previous versions of yq required double quoting to force values to be strings, this no longer works - instead use the --tag flag.
Casting booleans
yq new --tag '!!str' key trueresults in
key: "true"Casting nulls
yq new --tag '!!str' key nullresults in
key: "null"Custom types
yq new --tag '!!farah' key goldresults in
key: !!farah goldThe style flag
The --style flag can be used to specify the quote or block style of the node value. Valid values are
single
double
folded
flow
literal
tagged
For example, given:
MULTILINE=$(cat <<END
This is line one.
This is line two.
END
)
SINGLE="only one line"Single
yq n --style single things "$MULTILINE"things: 'This is line one.
This is line two.'Double
things: "This is line one.\nThis is line two."Folded:
things: >-
This is line one.
This is line two.
Folded single line:
things: >-
only one lineFlow:
things: |-
This is line one.
This is line two.
Flow single line:
things: only one lineLiteral
things: |-
This is line one.
This is line two.
Literal single line
things: |-
only one lineTagged
Always show the tag, note - you must also pass in --tag='!!str'
things: !!str |-
This is line one.
This is line two.
Tagged single line
things: !!str only one lineLast updated
Was this helpful?