簡體   English   中英

在bash中使用curl與Brace時使用錯誤

[英]Brace usage error while using curl with in bash

使用卷曲后,不喜歡牙套內的牙套。 我嘗試轉義,但沒有幫助...任何想法?

echo "$(curl -s -u ${USERNAME}:${PASSWORD} GET ${hostName}/${path}.json| jq -r -c '[.field1,.field2] | \"(.[0]) ,(.[1])"')"

結果:

jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell
quoting issues?) at <top-level>, line 1:

error near (.[0]`)`

要調試這種情況,最好首先將其分解為基本組件。 在您的情況下,我猜您打算將jq過濾器設為:

[.field1,.field2] | "\(.[0]), \(.[1])"

去測試:

 jq -r -c '[.field1,.field2] | "\(.[0]), \(.[1])"'
 {"field1": 1, "field2": 2}
 1, 2

一旦您擁有正確的部分,其余的就很容易了。 假設您使用的是一個不錯的外殼,可以使用$()而不是"$()"來簡化生活,或者完全避免使用命令替換。

從開發和測試的角度來看,將您知道正確的jq程序放入一個文件(例如program.jq)可能是有意義的,然后可以依次執行以下操作:

(a)使用jq -r -c -f program.jq獨立模式驗證它

(b)將jq調用插入管道中,以驗證其他地方沒有其他問題。

如果最終不能令人滿意地使用program.jq,則可以考慮為jq程序設置一個shell變量,例如

JQ='[.field1,.field2] | "\(.[0]), \(.[1])"'

echo $(jq -r -c "$JQ")

當然,上面的最后一行僅用於測試。 也許您根本不需要$()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM