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.