bash syntax tilde-expansion

bash - Tilde en ruta no se expande al directorio de inicio



syntax tilde-expansion (4)

Digamos que tengo una carpeta llamada Foo ubicada en /home/user/ (mi /home/user también está representado por ~ ).

Quiero tener una variable

a="~/Foo" y luego haz

cd $a

Obtengo -bash: cd: ~/Foo: No such file or directory

Sin embargo, si acabo de hacer cd ~/Foo funciona bien. ¿Alguna pista sobre cómo hacer que esto funcione?


Puede usar $HOME lugar de la tilde (la tilde se expande por el shell a los contenidos de $HOME ). Ejemplo:

dir="$HOME/Foo"; cd "$dir";


Puedes hacerlo (sin comillas durante la asignación de variables):

a=~/Foo cd "$a"

Pero en este caso, la variable $a no almacenará ~/Foo sino la forma expandida /home/user/Foo . O podrías usar eval :

a="~/Foo" eval cd "$a"


Si usa comillas dobles, el ~ se mantendrá como ese carácter en $ a.

cd $ a no expandirá el ~ ya que el shell no expande los valores de las variables.

La solucion es:

eval "cd $ a"


Una solución mucho más robusta sería usar algo como sed o, mejor aún, la expansión de parámetros de bash:

somedir="~/Foo/test~/ing"; cd ${somedir/#/~/$HOME}

o si tiene que usar sed,

cd $(echo $somedir | sed "s#^~#$HOME#")