Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Problem with string interpolation #23

Closed
robdmc opened this issue Oct 22, 2012 · 3 comments
Closed

Problem with string interpolation #23

robdmc opened this issue Oct 22, 2012 · 3 comments
Labels

Comments

@robdmc
Copy link

robdmc commented Oct 22, 2012

I'm either using it incorrectly, or string interpolation appears to be broken. See below.

<tmp]$ echo {"foo":42} | jq '@(the input was %(.))'
error: Invalid character
@(the input was %(.))
^
error: syntax error, unexpected IDENT
@(the input was %(.))
^^^^^
error: Invalid character
@(the input was %(.))
^
3 compile errors

@stedolan
Copy link
Contributor

Ah! It is broken! I changed it to a less ugly syntax a couple of days ago and forgot to update the docs. Here's what it looks like now:

"the input was \(.)"

@robdmc
Copy link
Author

robdmc commented Oct 22, 2012

Cool. That seems to work, thanks. I really like this tool, by the way.

On Mon, Oct 22, 2012 at 11:39 AM, Stephen Dolan notifications@github.heygears.comwrote:

Ah! It is broken! I changed it to a less ugly syntax a couple of days ago
and forgot to update the docs. Here's what it looks like now:

"the input was (.)"


Reply to this email directly or view it on GitHubhttps://github.com//issues/23#issuecomment-9675318.

@stedolan
Copy link
Contributor

Thanks! The docs are now a little closer to reality.

@dtolnay dtolnay added the docs label Jul 27, 2015
pkoppstein added a commit to pkoppstein/jq that referenced this issue Jun 29, 2023
… uniq(stream)

The primary purpose of this commit (which supercedes PR
jqlang#2624) is to rectify most problems
with `gsub` (and also `sub` with the "g" option), in particular jqlang#1425
('\b'), jqlang#2354 (lookahead), and jqlang#2532 (regex == "^(?!cd ).*$|^cd ";"")).

This commit also partly resolves jqlang#2148 and jqlang#1206 in that `gsub` no
longer loops infinitely; however, because the new `gsub` depends
critically on match(_;"g"), the behavior when regex == "" is sometimes
non-standard. [*1]

Since the new sub/3 relies on uniq/1, that has been added as well [*2].

The documentation has been updated to reflect the fact that `sub` and
`gsub` are intended to be regular in the second argument. [*3]

Also, _nwise/1 has been tweaked to take advantage of TCO.

Footnotes:

[*1] Using the new gsub, '"a" | gsub( ""; "a")' emits "aa" rather than
"aaa" as would be standard.  This is nevertheless better than the
infinite loop behavior of jq 1.6 in this case.

With one exception (as explained in [*2]), the new gsub is implemented
as though match/2 behavior is correct.  That is, bugs in `gsub`
behavior will most likely have their origin in `match/2`.

[*2] `uniq/1` adopts the Unix/Linux name and semantics; it is needed for the following test case:

gsub("(?=u)"; "u")
"qux"
"quux"

Without this functionality:

Test jqlang#23: 'gsub("(?=u)"; "u")' at line number 100
*** Expected "quux", but got "quuux" for test at line number 102: gsub("(?=u)"; "u")

The root of the problem here is `match`: if `match` is fixed, then gsub would not need `untie`.

The addition of `uniq` as a top-level function should be a non-issue
relative to general concern about builtins.jq bloat: the line count of
the new builtin.jq is significantly reduced overall, and the number of
defs is actually reduced by 1 (from 111 (ignoring a redundant def) to 110).

[*3] See e.g. jqlang#513 (comment)
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants