Atualizado com comentários e discussões de bate-papo levados em consideração.
O código PHP executa o script de shell como sh ./curl.sh $title , em que $title é uma variável do PHP (idealmente, deve-se citar corretamente o $title data para não confundir o shell). Portanto, o script de shell precisa escolher o título a partir de seus parâmetros de linha de comando, $* , em vez de usar a variável de shell $title .
O documento JSON que enviou é simples, o que significa que a expansão da variável $title não será vista pelo shell.
Você precisa sair temporariamente da única string entre aspas para obter a variável expandida:
-d '{ "template_id": "template...{ "text": "'"$*"'" }...
As aspas duplas externas em "'"$*"'" pertencem ao documento JSON, o conteúdo entre aspas simples pertence ao shell. As aspas duplas internas citam o valor $* (no caso de conter padrões de espaço em branco e / ou globalização de nomes de arquivos).
Houve um problema adicional no código PHP, o que significa que a variável $title do PHP nunca foi configurada corretamente. Quando isso foi corrigido, funcionou como esperado.