在JQ

2017-06-13 56 views
0

逃生引號我有以下兩行的bash在JQ

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

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

,但我得到了以下錯誤:

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

任何想法如何通過具有有雙引號正確轉義的那部分靜音shellcheck錯誤

+0

變量BOO的內容是什麼? - 確定它是空的,所以語法錯誤,因爲jq命令內沒有引號(引號在這個命令中是用於bash的語法,除了foo附近的引號外) –

回答

7

只需使用一個變量,並保存自己的麻煩:

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

--arg b "$BOO"創建一個變量$b,您可以在jq之內使用,而不必處理報價問題。

這就是說,你的嘗試失敗了,你是缺少一些字面雙引號的原因:

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

額外的雙引號每個命令的單引號的部分是因爲在命令字符串傳遞給jq之前,其他shell被shell使用。

這將仍然失敗的情況下,殼變量包含任何引號,所以第一種方法是首選。