Você precisa dar aspas duplas em $result em vez de aspas simples; caso contrário, elas não serão expandidas.
[ '$result' == 'yes' ] nunca será avaliado como verdadeiro porque está tentando comparar o literal $result com o literal yes .
Além disso, como Kusalananda aponta; o operador == é para construções de teste bash [[ , enquanto o operador = é para construções de teste padrão (POSIX) [ .
Portanto, você deve alterar essa linha para: [ "$result" = 'yes' ]
Outra boa ferramenta a ser conhecida é a set builtin e sua -x switch que pode ser usada para rastrear seus scripts. Se você adicionar set -x ao topo do seu script original e executá-lo, verá o seguinte impresso:
+ read -e -i no -p 'Install? ' result
Install? yes
+ '[' '$result' == yes ']'
Como você pode ver, está tentando comparar '$ result' a 'yes'. Quando citada corretamente, você não verá a variável $result , mas a expansão é assim:
+ read -e -i no -p 'Install? ' result
Install? yes
+ '[' yes == yes ']'
+ subs=('one' 'two')
+ declare -a subs
+ for sub in '"${subs[@]}"'
+ echo one
one
+ for sub in '"${subs[@]}"'
+ echo two
two
Sempre que você estiver batendo a cabeça contra a parede com um script, você deve ativar set -x e rastrear o que está fazendo e onde está errado.