readlink literal vs variable

Usando BASH: la respuesta es probablemente obvia, pero no para mí.

> echo $PWD /root/fcm > readlink -f ~ /root > # but then with a variable or literal > a='~' > readlink -f $a /root/fcm/~ > readlink -f "~" /root/fcm/~ 

Estoy esperando recibir solo '/ root /';
¿Quién está haciendo la sustitución bash o readlink?

El caparazón hace la expansión tilde. readlink no lo hace. Bash no expandirá tilde entre comillas.

readlink -f $a no hace lo que quieres ya que la expansión de tilde ocurre antes de la expansión de variables, es decir, la variable se expande a ~ , pero esa tilde no se expandirá más.

El order en que Bash hace las cosas es: expansión de llaves, expansión de tilde, expansión de parameters y variables, sustitución de commands, expansión aritmética, split de palabras y expansión de nombres de routes.

Además, no trabaje con la session iniciada como raíz …