如何将bash变量插入到cURL请求的JSON体中?



我正在尝试运行以下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作为实际的密码,而不是变量的内容。如何正确地插入这个变量?

您可以使用jq来创建JSON:

json=$(jq -c -n --arg username admin --arg password "$password" '$ARGS.named')
curl $ARGOCD_SERVER/api/v1/session -d "$json"

无论变量的内容是什么,使用jq都可以确保JSON的公式是正确的:

$ 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"}

像这样:

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"

相关内容

  • 没有找到相关文章

最新更新