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/~

Espero receber apenas '/ root /';
Quem está fazendo a festa de substituição ou readlink?

    
por fcm 27.02.2017 / 11:48

1 resposta

9

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 ...

    
por 27.02.2017 / 11:51