O shell faz a expansão do til. readlink
não. O Bash não expandirá o til nas cotações .
readlink -f $a
não faz o que você quer, pois a expansão do til acontece antes da expansão da variável, ou seja, a variável é expandida para ~
, mas esse til não será expandido ainda mais.
A ordem na qual o Bash faz as coisas é: expansão de brace, expansão de til, expansão de parâmetros e variáveis, comando substituição, expansão aritmética, divisão de palavras e nome de caminho expansão.
Usar $HOME
pode ser preferível ao uso do til em algumas circunstâncias, pois ele se comporta como qualquer outra variável.
Por favor, não trabalhe logado como root ...