~ won't expand to user folder

If you’ve used bash before, then the tilde (~) is probably familiar to you. It’s a shortcut for your home folder in the terminal. Thus, cd ~ on my system works as follows:

1
2
3
4
5
6
$ cd /
$ pwd
/
$ cd ~
$ pwd
/Users/erichu

This is great, but I’ve run into hiccups using this in scripts or certain situations.

1
2
3
4
5
6
7
8
9
10
11
$ mkdir 'folder with spaces'
$ cd folder\ with\ spaces/
$ pwd
/Users/erichu/folder with spaces

# This works
$ cd ~/folder\ with\ spaces/

# This doesn't
$ cd "~/folder\ with\ spaces/"
-bash: cd: ~/folder\ with\ spaces/: No such file or directory

Tilde doesn’t expand to home when quoted, either with single or double quotes. A workaround is to expand the home folder manually:

1
2
3
4
5
6
7
$ cd "$HOME/folder with spaces"
$ pwd
/Users/erichu/folder with spaces

# NOTE: bash variables don't expand within single quotes
$ cd '$HOME/folder with spaces'
-bash: cd: $HOME/folder with spaces: No such file or directory