bashsyntaxtilde-expansion

Tilde in path doesn't expand to home directory


Say I have a folder called Foo located in /home/user/ (my /home/user also being represented by ~).

I want to have a variable

a="~/Foo" and then do

cd $a

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

However if I just do cd ~/Foo it works fine. Any clue on how to get this to work?


Solution

  • You can do (without quotes during variable assignment):

    a=~/Foo
    cd "$a"
    

    But in this case the variable $a will not store ~/Foo but the expanded form /home/user/Foo. Or you could use eval:

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