Quando você usa ./scriptname.sh , ele executa com /bin/bash , como na primeira linha com #! . Mas quando você usa sh scriptname.sh , ele executa sh , não bash .
O shell sh não tem sintaxe para criar matrizes, mas o Bash tem a sintaxe usada.