A execução de xx pesquisa os diretórios listados na variável de ambiente PATH para um arquivo chamado xx . O primeiro executável encontrado (seja um binário ou um script) é executado. Ele não procura no diretório atual, a menos que . esteja listado em PATH , o que é não recomendado.
A execução de ./xx executa o arquivo chamado xx que está localizado no diretório atual, se houver um arquivo executável com esse nome.
Para executar um arquivo especificando seu local , você deve incluir um símbolo / . Se não houver / no comando (na verdade, a primeira palavra do comando, que é o que identifica o nome do arquivo a ser executado), ele procura PATH por ele. Se houver um / , a primeira palavra do comando será usada para se referir a um arquivo específico por localização.
Assim, ./xx é diferente de xx devido ao / que contém.
É claro que /xx não funcionaria corretamente - tentaria executar um arquivo chamado xx localizado no diretório raiz, / . Como . representa o diretório atual, ./xx runs xx there.