-
-
Notifications
You must be signed in to change notification settings - Fork 716
Description
Describe the bug
Array subtraction appears to modify its LHS. When the LHS is a variable that is used again later, this has unexpected results.
Version of yq:
$ yq --version
yq (https://github.com/mikefarah/yq/) version v4.44.3
Operating system: macOS
Installed via: homebrew
Input Yaml
["a", "b"]Command
The command you ran:
$ <<<'["a", "b"]' yq e '["a","b"] as $f | {"0": $f, "1": $f - ., "2": $f}'
Actual behavior
The variable appears to be modified. .2 is empty.
"0":
- a
- b
"1": []
"2": []Expected behavior
.2 should contain the assigned value of $f, ["a", "b"]
Compare to re-using a variable without doing the array subtraction:
$ <<<'["a", "b"]' yq e '["a","b"] as $f | {"0": $f, "2": $f}'
"0":
- a
- b
"2":
- a
- b
If the LHS is the context ., the same thing occurs:
$ <<<'["a", "b"]' yq e '["a","b"] as $f | {"0": ., "1": . - $f, "2": .}'
"0": ["a", "b"]
"1": []
"2": []
As a point of comparison, jq does not have this behavior:
$ <<<'["a", "b"]' jq '["a","b"] as $f | {"0": $f, "1": ($f - .) , "2": $f}'
{
"0": [
"a",
"b"
],
"1": [],
"2": [
"a",
"b"
]
}
Additional context
I think this is due to this line:
https://github.com/mikefarah/yq/blob/master/pkg/yqlib/operator_subtract.go#L41
// removing children from LHS, parent hasn't changed
lhs.Content = newLHSArray
I don't understand the intent expressed by the comment.