我有几个curl 命令,一个用于获取身份验证密钥,另一个需要使用该密钥,目前我有以下bash 脚本。
#!/bin/bash
ACCESS_TOKEN=$(curl -XPOST -H "Content-type: application/json" -d '{"client_id":"XXX", "client_secret":"XXX", "grant_type":"client_credentials"}' 'https://url.com' | ./jq '.access_token')
echo $ACCESS_TOKEN
UPLOADARRAY=$(curl -v -XGET -H 'Authorization: Bearer "$ACCESS_TOKEN"' -H 'client_id:XXX' -H "Content-type:application/json" 'https://otherurl.com' | ./jq '{authCode: .authCode, name: .uploadUrl}')
echo $UPLOADARRAY
问题是查看我看到的第二个curl 命令的详细输出:
> User-Agent: curl/7.77.0
> Accept: */*
> Authorization: Bearer "$ACCESS_TOKEN"
因此,未使用变量访问内容的内容(测试回显语句显示确实包含正确的值),而是使用字符串“$ACCESS_TOKEN”。
我确实看过在 Bash 中的 $(命令替换) 内引用并用额外的双引号将命令括起来,但这没有什么区别。
谁能发现这里出了什么问题吗?
答案1
这是关键部分:
'Authorization: Bearer "$ACCESS_TOKEN"'
您遇到的问题是外部单引号阻止变量扩展。
这应该使它能够成功扩展,同时保持良好的报价实践:
"Authorization: Bearer \"$ACCESS_TOKEN\""