簡體   English   中英

如何將 bash 變量插入到 cURL 請求的 JSON 正文中?

[英]How do I insert a bash variable into the JSON body of a cURL request?

我正在嘗試運行以下 cURL 命令(取自 ArgoCD 文檔)。

$ curl $ARGOCD_SERVER/api/v1/session -d $'{"username":"admin","password":"password"}'

使用手動輸入的正確憑據,它運行良好,但我將密碼存儲在環境變量 ( $PASSWORD ) 中,並且使用'"引號,它無法正確插入密碼。

$ curl $ARGOCD_SERVER/api/v1/session -d $'{"username":"admin","password":"$PASSWORD"}'

我懷疑它使用字符串文字$PASSWORD作為實際密碼,而不是變量的內容。 我將如何正確插入這個變量?

像這樣:

curl $ARGOCD_SERVER/api/v1/session -d '{"username":"admin","password":"'$PASSWORD'"}'

或這個:

curl $ARGOCD_SERVER/api/v1/session -d "{\"username\":\"admin\",\"password\":\"$PASSWORD\"}"

這也可能會起作用:

curl $ARGOCD_SERVER/api/v1/session -d "{'username':'admin','password':'$PASSWORD'}"

或者:

printf -v data '{"username":"admin","password":"%s"}' "$PASSWORD"
curl $ARGOCD_SERVER/api/v1/session -d "$data"

您可以使用創建 JSON:

json=$(jq -c -n --arg username admin --arg password "$password" '$ARGS.named')

curl $ARGOCD_SERVER/api/v1/session -d "$json"

使用jq可確保 JSON jq正確,無論變量的內容如何:

$ password=$'with\'both"quotes'
$ declare -p password
declare -- password="with'both\"quotes"
$ jq -cn --arg username admin --arg password "$password" '$ARGS.named'
{"username":"admin","password":"with'both\"quotes"}

暫無
暫無

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

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