Не уверен, но это может помочь процитировать, где вы используете public_key, т.е.
curl -u 'username:password' \
-d '{"title":"Test Deploy Key", "key":"'"$public_key"'"}' \
-i https://api.github.com/repos/username/repository/keys
В противном случае отладка будет намного проще, если вы используете параметры отладки оболочки set -vx
в верхней части скрипта bash.
Вы увидите каждую строку кода (или блока (для, в то время, и т. Д.)), Как она есть в вашем файле. Затем вы увидите каждую строку кода с переменными, расширенными до их значений.
Если вы все еще застряли, отредактируйте ваш пост, чтобы показать расширенные значения переменных для проблемной строки в вашем скрипте. То, что у тебя есть, на первый взгляд выглядит разумно.