~ é um atalho para o seu diretório pessoal, mas apenas quando aparece no início de uma string entre aspas externas . O início do lado direito de um operador de atribuição é o começo de uma string, então env1=~/Dropbox/.env funcionaria (ou env1=~"/Dropbox/.env" ou qualquer número de variações). Define env1 para /home/roach/Dropbox/.env . Mas env1="~/Dropbox/.env" define env1 para a exata string ~/Dropbox/.env , que como um nome de arquivo procura dentro de um diretório com o nome de um caractere ~ no diretório atual.
til é uma abreviação, não um curinga. $env1 fora de aspas expande curingas no valor de env1 , mas não expande o til porque o til não é um caractere curinga.
Você também pode usar env1="$HOME/Dropbox/.env" . Isso é equivalente a env1=~/Dropbox/.env . O caractere $ (dólar) tem um significado especial entre aspas duplas (é o mesmo significado que as aspas externas): ele inicia uma substituição de variável (ou um comando ou uma substituição aritmética). O caractere ~ (til), por outro lado, é apenas um caractere comum quando está entre aspas, até mesmo aspas duplas.
Quanto ao alias, o motivo pelo qual ele não funciona em um script bash é que o bash não expande aliases em scripts por padrão. Ele não funcionará em nenhum script, a menos que você inclua ou forneça a definição do alias nesse script, já que os aliases são uma propriedade de cada instância do shell. Eles não fazem parte do ambiente de um processo.
O motivo pelo qual o alias funciona em seu segundo script é que o próprio dotdrop expande o til quando lê seu valor de configuração.