如何在Bash脚本中将curl响应中的ACCESS-TOKEN值保存到变量
从Curl响应头提取ACCESS-TOKEN到Bash变量
这有几种简单可靠的方法,帮你把curl输出里的ACCESS-TOKEN值提取出来并存入变量,方便后续使用:
方法1:Grep + Awk组合
这是最直观的方式,先用grep定位目标行,再用awk提取token值:
ACCESS_TOKEN=$(curl -k -I --header "Accept: application/*;version=34.0" --header "Authorization: Basic testXXX1" --request POST https://test.io/api/sessions 2>/dev/null | grep -i "ACCESS-TOKEN:" | awk '{print $2}')
各部分解释:
2>/dev/null:把curl的错误提示(比如连接状态信息)重定向到空设备,避免干扰最终结果grep -i "ACCESS-TOKEN:":忽略大小写匹配目标行,确保哪怕响应头里是小写的access-token:也能命中awk '{print $2}':提取该行的第二个字段,也就是冒号后面的token值
方法2:用Sed直接替换提取
Sed可以直接匹配并替换掉不需要的部分,只保留token:
# 精确匹配大小写的版本 ACCESS_TOKEN=$(curl -k -I --header "Accept: application/*;version=34.0" --header "Authorization: Basic testXXX1" --request POST https://test.io/api/sessions 2>/dev/null | sed -n 's/^ACCESS-TOKEN: //p') # 忽略大小写的版本(GNU Sed可用) ACCESS_TOKEN=$(curl -k -I --header "Accept: application/*;version=34.0" --header "Authorization: Basic testXXX1" --request POST https://test.io/api/sessions 2>/dev/null | sed -n 's/^ACCESS-TOKEN: //Ip')
解释:
-n:告诉sed只输出处理后的匹配行s/^ACCESS-TOKEN: //p:把行首的ACCESS-TOKEN:替换为空,然后打印剩下的内容(就是我们要的token)I标志:让匹配忽略大小写(仅GNU Sed支持,如果你用的是BSD Sed,可以用字符组[Aa][Cc]...来实现)
方法3:直接用Awk处理
不需要额外的grep,awk可以直接完成匹配和提取:
# 精确匹配大小写 ACCESS_TOKEN=$(curl -k -I --header "Accept: application/*;version=34.0" --header "Authorization: Basic testXXX1" --request POST https://test.io/api/sessions 2>/dev/null | awk '/^ACCESS-TOKEN:/ {print $2}') # 忽略大小写 ACCESS_TOKEN=$(curl -k -I --header "Accept: application/*;version=34.0" --header "Authorization: Basic testXXX1" --request POST https://test.io/api/sessions 2>/dev/null | awk 'tolower($0) ~ /^access-token:/ {print $2}')
验证结果
提取完成后,你可以用以下命令确认变量是否正确获取到了token:
echo $ACCESS_TOKEN
执行后应该只会输出test1.testXXX.testXX-testXXXX_testXXX_testXXXX-testXX_NR_TESTXX_test_nnndnndnddn_jdjdjdjd_jbjndinfjenkndkn-nnjjnj这个token值。
内容的提问来源于stack exchange,提问作者Jaw. M.
相关产品推荐
相关产品推荐

