${foo//$match/$replace}
использует шаблоны fnmatch (glob-style), а не любую форму, совместимую с форматами синтаксиса BRE / ERE / PCRE или другими традиционными форматами синтаксиса regex.
input="test_data(123)"
match='data(*)'
replace='xyz'
result=${input//$match/$replace}
echo "$result"
... правильно испускает test_xyz
.