yq
yq copied to clipboard
Argument values starting with dash '-' throw "argument --arg: expected 2 arguments"
Problem
Trying to pass an argument to the query via --arg
with a value starting with a dash, even when passed in quotes, yq
throws an error.
# yq -n --arg name "foo" --arg value "-bar" '{"name":$value}'
usage: yq [-h] [--yaml-output] [--yaml-roundtrip] [--yaml-output-grammar-version {1.1,1.2}] [--width WIDTH] [--indentless-lists]
[--explicit-start] [--explicit-end] [--in-place] [--version]
[jq_filter] [files ...]
yq: error: argument --arg: expected 2 arguments
It looks as if the --arg
value is interpreted as another argument here.
In comparison,jq
does not throw an error and even allows passing a dash-prefixed --arg
value without quotation marks.
Versions
Plattform
Alpine Linux 3.17.0
yq version
3.2.3
Python version
3.9.16
pip version
23.3.2
jq version
1.6-r2
Thanks for reporting. This is a limitation of argparse, which yq relies on to parse arguments and separate them into yq and jq arguments. I'm not aware of a workaround. You might consider using env (environment variables) in jq to pass the value in.