./script.sh
está executando um script da mesma forma que executamos um arquivo binário. O interpretador é escolhido de #!
no caso de ser um script e não um binário.
bash script.sh
invoca bash
como intérprete para executar o script.
Ambos parecem quase iguais, mas existem diferenças.
Uma grande diferença é que script.sh
deve ser executável para que ./script.sh
funcione. Esse é um arquivo com 644
, a permissão não pode ser executada dessa maneira. Por outro lado, para bash script.sh
, o interpretador pré-definido /bin/bash
já é executável. Portanto, um arquivo com 644
permission funciona com esse método.