2つのカールコマンドがあります。 1つは認証キーを取得し、もう1つはキーを使用する必要があります。現在、以下の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
問題は、2番目のカールコマンドの詳細な出力を見ることです。
> User-Agent: curl/7.77.0
> Accept: */*
> Authorization: Bearer "$ACCESS_TOKEN"
したがって、コンテンツの内容にアクセスするために変数を使用する代わりに(echoステートメントをテストすると正しい値が含まれていることが示されている)、文字列 "$ACCESS_TOKEN"が使用されます。
私は見たBashで$(コマンドを置き換える)内で引用追加の二重引用符でコマンドを束ねますが、違いはありません。
ここで何が間違っているのかを理解できる人はいますか?
答え1
これが重要な部分です。
'Authorization: Bearer "$ACCESS_TOKEN"'
問題は、外部一重引用符が変数の拡張を防止することです。
これにより、良い引用慣行を維持しながら正常に拡張できます。
"Authorization: Bearer \"$ACCESS_TOKEN\""