Bash Script – Как правильно выйти из JWT в завитке
Я пытаюсь просто выполнить несколько команд Curl для API из скрипта bash. Я написал его на 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 символов) и снова портит переменную.
Такое ощущение, что должно быть совершенно очевидно, что происходит, но я не могу понять, как правильно избежать этого.