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?

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.