use utf8で文字列内やヒアドキュメント内で変数展開をすると
変数の後ろの文字列も含めて変数と解釈されてしまいます。

"${str}文字列"
"$str\文字列"
$str . "文字列"

などのようにエスケープなり逐一処理するしかないのでしょうか?