>>результат выполнения: ./script.sh: ${str/...}: Bad substitution
>>
>Можно конечно запускать bash ./script.sh и тогда работает... но не понятно почему
>не работает без явного указания bash Потому что "${str//-/}" - это конструкция bash, но не sh. Bash предоставляет значительно больший функционал, нежели стандартный sh. Так как первой строкой у вас указан /bin/sh, то именно он и пытается выполнять скрипт, а такой конструкции он не знает. Укажите в качестве исполнителя скрипта (первая строка) bash и будет вам счастье.
P.S. А вторая строка у вас вообще непонятно, зачем. Каково её назначение?