Isso funciona para mim em 16.04 LTS, quando executado a partir da linha de comando em uma janela de terminal,
$ i=~/tost1
$ echo "$i"
/home/sudodus/tost1
$ touch ~/tost1
$ if [ -e ${i} ]; then echo "file exists";else echo "file does not exist";fi
file exists
Mas é uma boa idéia usar $HOME
ao invés de til, particularmente se você pretende fazer um shellscript com os comandos que você testa interativamente, então comece com
$ i="$HOME"/tost1
$ touch ~/tost1
$ if [ -e "${i}" ]; then echo "file exists";else echo "file does not exist";fi
file exists
É um bom hábito de aspas duplas, se você quiser evitar surpresas desagradáveis. (Existem algumas exceções.)