Vale lembrar que o Bash é o único interpretador shell com suporte a arrays (ou talvez tenha só mais 1, não lembro ao certo). Portanto, scripts que utilizarem este recurso não irão rodar em outros como o dash, utilizado como interpretador de scripts de boot do Ubuntu.
@Kurt, o zsh tbm suporta (aliás, o zsh é quase que um superset do bash: faz tudo que o bash faz e mais).
Mas programar em shell-script é igual em outras linguagens: tem gente que programa em C mas não segue o padrão ANSI (e o gcc aceita coisas fora do padrão), ou mesmo Javascript, HTML e CSS, onde vira e mexe alguém cria alguma coisa fora do padrão mas que posteriormente acaba indo pro “mainstream” e incorporado no padrão.
Por exemplo os arrays associativos são muito interessantes, e o bash 4.0 implementa, mas os outros shells não.
declare -A array
array["Chave 1"]=”valor 1″
echo ${array["Chave 1"]}
Uma coisa que seria legal é arrays com mais de uma dimensão no Bash. Ele permitiria fazer coisas como parsers JSON de páginas web (lynx), por exemplo, mas atualmente isto não pode ser feito de maneira “natural”, diretamente para variáveis nativas da linguagem. A maioria das linguagens de scripts de propósito geral (bem, que não é o bash :-)) possibilita isso.
Vale dar uma lida nesse comentário: http://www.thegeekstuff.com/2010/06/bash-array-tutorial/#comment-49041