2016-11-09 5 views
0

ich ein Problem mit einer JQ Abfrage habe:JQ Argument Fehler in Bash-Skript

max=$(script) <-- (return integer) 
jq -r ".notifiestext | map(select(.read==false))" temp_notif | 
    jq --arg foo "$max" "map(select(.id<$foo))" 

ich die folgende Fehlermeldung erhalten:

jq: error: syntax error, unexpected ')' (Unix shell quoting issues?) at <top-level>, line 1: map(select(.id<)) 

Die ".id" Parameter sind eine ganze Zahl

Irgendeine Lösung?

+2

Besser [bearbeiten] Sie die Frage direkt, anstatt Kommentare hinzuzufügen. Verwenden Sie auch Einrückungen für Code-Blöcke anstelle von Multi-Line-Backticks. –

Antwort

3

Sie müssen die $ für $foo so umgehen, dass die Shell nicht versucht, es als Parameter zu erweitern, bevor jq sogar ausgeführt wird.

jq -r ".notifiestext | map(select(.read==false))" temp_notif | 
    jq --arg foo "$max" "map(select(.id<\$foo))" 

Es wäre besser, stattdessen einfache Anführungszeichen für die jq Filter zu verwenden.

jq -r '.notifiestext | map(select(.read==false))' temp_notif | 
    jq --arg foo "$max" 'map(select(.id<$foo))' 
+2

Es sollte auch angemerkt werden, dass der zweite Aufruf von jq völlig unnötig ist. Es hätte mit einem einzigen Anruf geschrieben werden können. –

+0

Um ehrlich zu sein, habe ich nie einmal angeschaut, was beide Aufrufe eigentlich machen. – chepner