Se o autor estava tentando pegá-lo falando sobre essa cadeia literal (sem expansão de shell) como um caminho, então é um caminho relativo ( mkdir -p './~/Documents' ). Caso contrário:
É um caminho absoluto , porque a resolução não depende do funcionamento atual do processo diretório. Caminho relativo sempre significa relativo ao diretório de trabalho do processo. Ou no caso de alvos de links simbólicos, relativos à localização do link simbólico. ( gcc -> gcc-5.2 vs. gcc -> /usr/bin/gcc-5.2 ). Isso é importante para montagens NFS e outros casos em que você pode obter o mesmo symlink através de diferentes caminhos absolutos. por exemplo,
/net/tesla/home/peter/foo -> bar # always works from other machines
/net/tesla/home/peter/foo -> /home/peter/bar # references my home dir on the local machine, not tesla.
Algumas vezes o Debian instalará links simbólicos para ../../doc/whatever/whatever , ao invés de um alvo de symlink absoluto, então funciona quando o NFS é montado em outro lugar, ou quando se olha para um chroot sem chroot(8) ing nele.
Todo processo Unix tem seu próprio cwd. O comando pwd existe apenas para imprimi-lo.
veja: link para saber mais sobre como alterar diretórios com as chamadas do sistema POSIX.
Como todos já disseram, ~ é expandido pelo shell antes que o caminho seja usado para qualquer coisa. Usar ~/bin/myprog em um script de shell fará com que funcione de maneira diferente para diferentes usuários. A diferença entre ~/bin/foo e /home/peter/bin/foo é que um deles codificou permanentemente o local, enquanto o outro o parametrizou. É um erro (IMO) chamar a versão ~ de um caminho relativo.
Falar sobre as coisas ser "relativo a uma variável de ambiente" é confuso. É uma prática ruim usar diferentes significados de termos em inglês que tenham significados técnicos específicos no contexto em que você os usa.
Em um sistema corrompido, com HOME=a/relative/path , ~/foo se expandiria para um caminho relativo. Isso não seria uma configuração utilizável.