Dentro de aspas simples, o shell não expande nada. Coloque-os entre aspas duplas:
curl -u <my-api-token>: \
-X POST https://api.pushbullet.com/v2/pushes \
--header 'Content-Type: application/json' \
--data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
"body": "'"$TR_TORRENT_NAME completed"'."}'
Vamos examinar como isso funciona, observando:
$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}
Quando a variável shell aparece, ela está sempre entre aspas duplas. Consequentemente, é adequadamente expandido.
Citar assim é um pouco sutil. Temos cadeias de citação simples que contêm aspas duplas como caracteres e são próximas a cadeias de citação dupla. Para entender isso melhor, tomemos este fragmento como um exemplo:
"'"$TR_TORRENT_NAME"'"
Tomando cada personagem por vez:
"
é um caractere de aspas duplas literal que está dentro de uma string de aspas simples. (Por uma questão de brevidade, o início dessa string não é mostrado neste fragmento.)
'
fecha uma sequência de aspas simples.
"
abre uma cadeia de caracteres entre aspas duplas.
$TR_TORRENT_NAME
é uma variável de shell que é expandida entre aspas duplas.
"
fecha a cadeia de caracteres entre aspas duplas.
'
abre uma nova sequência de aspas simples.
"
coloca um caractere de aspas duplas dentro da string de aspas simples.