jq

2017-06-13 3 views
0

Ich habe die folgenden zwei bash Linienjq

TMPFILE="$(mktemp)" || exit 1 

< package.json jq '. + {"foo":'"${BOO}"'}' > "$TMPFILE" 

aber ich bekomme die folgende Fehlermeldung:

jq: error: syntax error, unexpected '}' (Unix shell quoting issues?) at <top-level>, line 1: 
. + {"foo":} 
jq: 1 compile error 

eine Idee, wie man richtig, dass ein Teil zu entkommen, indem Sie die doppelten Anführungszeichen dort mit verwenden, um den Fehler shellcheck

+0

Was ist der Inhalt der Variablen BOO? - ok, es ist leer, also Syntaxfehler, weil es kein Zitat innerhalb des jq-Befehls gibt (Anführungszeichen sind syntaktisch für bash in diesem Befehl außer Anführungszeichen um foo) –

Antwort

7

Nur eine Variable stumm zu schalten und sich die Mühe sparen:

< package.json jq --arg b "$BOO" '. + { foo: $b }' 

--arg b "$BOO" erstellt eine Variable $b, die Sie innerhalb jq verwenden können, ohne mit Zitaten Probleme zu behandeln.

Das heißt, der Grund, dass Ihr Versuch wurde versagte, dass Sie einige wörtliche doppelte Anführungszeichen fehlten:

< package.json jq '. + { foo: "'"$BOO"'" }' 

Die zusätzlichen doppelten Anführungszeichen innen jeder der die einzelnen zitierten Teile des Befehls sind erforderlich, da die anderen von der Shell verbraucht werden, bevor die Befehlszeichenfolge an jq übergeben wird.

Dies wird immer noch fehlschlagen, wenn die Shell-Variable irgendwelche Anführungszeichen enthält, also ist der erste Ansatz der bevorzugte Ansatz.