![Bash 脚本-如何在 curl 中正确转义 JWT](https://linux22.com/image/790402/Bash%20%E8%84%9A%E6%9C%AC-%E5%A6%82%E4%BD%95%E5%9C%A8%20curl%20%E4%B8%AD%E6%AD%A3%E7%A1%AE%E8%BD%AC%E4%B9%89%20JWT.png)
我试图在 Bash 脚本中针对 API 执行一些 curl 命令。我在 Mac OS 上编写了它,它运行起来没有问题。我开始在 Linux 上执行它,发现了一些我无法理解的奇怪行为。基本上在 OSX 上的原始版本上,我运行了这样的命令:
var=$(curl -H "Authorization: Bearer $TOKEN" -X GET "https://some.host.com/path1/${var1}/path1/${var2}/?api-version=2010-10-10&\$filter=someFilter()" 2>/dev/null)
不知何故,JWT 弄乱了 Linux 上的变量。我进行了一些调试,发现了这一点:
METHOD="GET"
URI="https://some.host.com/path1/${var1}/path1/${var2}/?api-version=2010-10-10&\$filter=someFilter()"
cmd="curl -H Authorization: Bearer $TOKEN -X $METHOD $URI"
echo $cmd
在 Linux 上执行此操作会以混乱的方式输出变量:
curl -H Authorization: Bearer YYYYYYYYYY -X GET https://some.host.com/path1/foo/path1/bar/?api-version=2010-10-10&$filter=someFilter()XXXXXXXXXX
出于显而易见的原因,我对 JWT 进行了混淆。Y 部分长 3420 个字符,X 部分长 98 个字符(加起来不等于完整的 JWT 长度)
好吧,我想我会逃避这些东西,尝试过但失败了:
cmd="curl -H Authorization: Bearer \"$TOKEN\" -X \"$METHOD\" \"$URI\""
Bash 将 TOKEN 的结尾“”设置在 JWT 中间的某个地方(3419 个字符之后),并再次弄乱变量。
感觉发生的事情应该很明显,但我无法弄清楚如何正确地摆脱这些问题。