Ao executá-lo com bash test.sh , você está explicitamente informando ao bash para carregar e executar test.sh . O arquivo só precisa ser lido para "correr" por esse método. Mas se você simplesmente executar um arquivo com ./test.sh , ele não será executado porque o arquivo não tem permissões de execução explícitas. acabou de ler permissons.
Ou seja, no primeiro caso test.sh está sendo carregado por bash . Mas por si só, os sistemas Unix / Linux não executam arquivos por padrão. Além disso, se você remover esse #!/bin/bash inicial de ./test.sh e tentar executá-lo mesmo com permissões de execução, ele não será executado, pois o sistema não saberá o que fazer com os comandos abaixo dele.
E se você está se perguntando enquanto os arquivos não recebem permissões de execução automaticamente na criação? Bem, essa é uma longa conversa, mas basicamente fazer algo assim criaria uma nova superfície de ataque no seu sistema. Se alguém pode entrar no seu sistema e apenas executar arquivos escrevendo-os, isso é um grande problema.