我正在尝试运行以下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"