Embora as duas respostas existentes já sejam excelentes, sinto o exemplo de que o efeito é o mais "perceptível", por assim dizer, está faltando.
Digamos que eu tenha um arquivo script.sh com o seguinte conteúdo:
cd dir
Se eu executasse este script normalmente ( sh script.sh ), eu veria isto:
olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$
Mas se eu for o local do script ( . script.sh ), acabaria com isso:
olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$
Observe como no segundo caso o diretório de trabalho do nosso shell principal mudou!
Isso ocorre porque (como apontado nas outras respostas) o primeiro exemplo é executado em sua própria subshell (o processo sh começamos com o comando sh , isso poderia ser basicamente qualquer shell, bash , dash , você nomeia), ele muda de diretório lá, não faz nada e fecha. Enquanto o segundo exemplo é executado em nosso shell principal e, portanto, muda o diretório para lá!