readlink literal vs variável

4

Usando o BASH: a resposta provavelmente é óbvia, mas não para mim.

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

Estou esperando receber apenas '/ root /';
Quem está fazendo o bash de substituição ou o readlink?

fcm
fonte

Respostas:

9

A concha faz a expansão do til. readlinknão. O Bash não expandirá o til entre aspas .

readlink -f $anã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 $HOMEpode 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 ...

Kusalananda
fonte