[英]How to insert a bash variable within GraphQL cURL POST request's JSON body
[英]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"
您可以使用jq創建 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.