O segundo ~ não está sendo expandido; tente
locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find
em vez disso, ou, como isso é zsh, apenas
locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find
O motivo é que ~/ é expandido apenas no início de uma palavra shell. Uma palavra shell termina apenas no espaço em branco (na medida em que é importante aqui - as regras reais são muito mais complicadas). ~/foo:~/bar é uma única palavra, que começa com ~/ , então o ~ inicial é expandido para o seu diretório pessoal, mas o ~ médio não é nada especial, então fica um til. Há uma exceção no lado direito de uma atribuição: em PATH=~/foo:~/bar , ~/ é expandido após o sinal = de atribuição e depois de : no lado direito.