Dentro de las comillas simples, el shell no expande nada. Colóquelos dentro de comillas dobles:
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"'."}'
Examinemos cómo funciona esto mirando:
$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}
Cuando aparece la variable de shell, siempre está entre comillas dobles. En consecuencia, se expande adecuadamente.
Citar así es un poco sutil. Tenemos cadenas de comillas simples que contienen comillas dobles como caracteres y están al lado de las cadenas de comillas dobles. Para entender esto mejor, tomemos este fragmento como ejemplo:
"'"$TR_TORRENT_NAME"'"
Tomando cada personaje por turno:
"
es un carácter de comillas dobles literal que está dentro de una cadena entre comillas simples. (Por brevedad, el comienzo de esta cadena no se muestra en este fragmento).
'
cierra una cadena entre comillas simples.
"
abre una cadena entre comillas dobles.
$TR_TORRENT_NAME
es una variable de shell que se expande entre comillas dobles.
"
cierra la cadena entre comillas dobles.
'
abre una nueva cadena entre comillas simples.
"
coloca un carácter de comillas dobles dentro de la cadena entre comillas simples.