Este é um script bash que requer que bash seja usado como intérprete.
Quando você executa com sh , não está usando bash . Sim, alguns sh são realmente bash disfarçados, mas isso não importa (não se comportará como "normal" bash em todas as circunstâncias). Tratar sh e bash como intérpretes mutuamente exclusivos, como se fossem perl e python (ou seja, não tente misturá-los).
Execute o script com
$ bash teste.sh
ou torná-lo executável e executá-lo diretamente:
$ chmod +x teste.sh
$ ./teste.sh
Esta última maneira de fazer isso pode ser preferível. Isso permite que o script decida, por meio de sua #! -line, qual interpretador deve ser usado.