espeak
suporta o uso de --stdin
para ler de um canal, portanto, uma opção seria alterar sua função chama para usar isso ao invés de parâmetros, e canaliza a saída do printf para a sua função:
speak(){ espeak -a 200 -s 130 -v la --stdout --stdin | aplay; }
printf '%b\n' "$(cat joyPhrase)" | speak
Ou você pode passar a saída do seu outro comando para os parâmetros de speak
, como este (embora seja menos provável que funcione se houver caracteres de controle):
speak $(printf '%b\n' "$(cat joyPhrase)")