jq icon indicating copy to clipboard operation
jq copied to clipboard

recurse(f) is not identical to recurse(f; .!=null)

Open emanuele6 opened this issue 3 years ago • 0 comments

Describe the bug The manual states:

recurse(f) is identical to recurse(f; . != null) and can be used without concern about recursion depth.

That is not actually true: recurse(f) only stops when there is no more input to process, not when . becomes null; it is identical to recurse(f; true).

To Reproduce

bash-5.1$ jq -cn '{foo:{bar:2,foo:{x:3}}} | recurse(.foo; . != null)'
{"foo":{"bar":2,"foo":{"x":3}}}
{"bar":2,"foo":{"x":3}}
{"x":3}

bash-5.1$ jq -cn '{foo:{bar:2,foo:{x:3}}} | recurse(.foo)'  # infinite loop
{"foo":{"bar":2,"foo":{"x":3}}}
{"bar":2,"foo":{"x":3}}
{"x":3}
null
null
null
null
^C

Expected behavior The current behaviour for recurse(f) is fine as is in my opinion, but the manual is wrong.

Environment (please complete the following information):

  • OS and Version: Arch Linux
  • jq version: 1.6

emanuele6 avatar Feb 12 '22 02:02 emanuele6