É o shell (não o psql) que é responsável por expandir o caractere ~
.
Assumindo o bash, consulte o link :
If a word begins with an unquoted tilde character (‘~’), all of the characters up to the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix
O til precedido por um sinal de igual é, de certa forma, um caso especial. Eles dizem:
Each variable assignment is checked for unquoted tilde-prefixes immediately following a ‘:’ or the first ‘=’. In these cases, tilde expansion is also performed. Consequently, one may use file names with tildes in assignments to PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.
--file=~/foo
não é uma atribuição variável, portanto, a expansão do til não é aplicada. Eu acho que --file=$HOME/foo
deve ser usado no lugar.
Por outro lado, file=~/foo
como um comando atribui /home/user/foo
a $file
.
Além disso, vejo que echo bar=~/foo
produzirá bar=/home/daniel/foo
apesar de não ser uma atribuição, alguns aparentemente há algum fator fuzz na regra acima.