Bash 脚本-如何在 curl 中正确转义 JWT

Bash 脚本-如何在 curl 中正确转义 JWT

我试图在 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 个字符之后),并再次弄乱变量。

感觉发生的事情应该很明显,但我无法弄清楚如何正确地摆脱这些问题。

相关内容