Resposta curta : está dizendo ao shell para verificar a existência de $filename para saber se deve escolher a declaração then ou else .
Antes que a declaração if possa ser avaliada, a condição precisa ser testada - ela é verdadeira ou é falsa? Aqui, [[ ]] denota uma variável booleana cujo valor depende da expressão dentro. Tradicionalmente, [ ] era a sintaxe bash para emitir o comando test , retornando o valor da expressão, independentemente do tipo e em qualquer contexto. Versões mais recentes do bash adotaram [[ ]] como uma palavra-chave exclusivamente para instruções if. Eu imagino que isso impede erros de tipo, ou algo assim.