Bash 在命令中的变量中使用变量

Bash 在命令中的变量中使用变量

我有几个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\""

相关内容