A concha faz a expansão do til. readlink
não. O Bash não expandirá o til entre aspas .
readlink -f $a
não faz o que você deseja, 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 chave, expansão de til, expansão de parâmetro e variável, substituição de comando, expansão aritmética, divisão de palavras e expansão de nome de caminho.
O uso $HOME
pode ser preferível ao uso de til em algumas circunstâncias, uma vez que se comporta como qualquer outra variável.
Além disso, não trabalhe logado como root ...