~ is $HOME. For me, cd ~ is /home/cat. Simple so far, yes?In Bash, the following happens:cat @ mint-kitty : ~/Downloads $ cd ~ # from /home/cat/Downloads to /home/cat/, as an example, but behaviour happens with any directorycat @ mint-kitty : ~ $ cd ~<TAB>proxy/ # oh? what's this?cat @ mint-kitty : /bin $ cd ~<TAB><TAB>~ais                ~clamav/            ~debian-tor/        ~gitlog             ~list               ~mixmaster/         ~ntp                ~redis/             ~stunnel4           ~systemd-resolve    ~uuidd/~avahi/             ~cl-builder/        ~dirmngr/           ~gnats              ~lp                 ~monkeysphere/      ~oident/            ~roard/             ~sync/              ~systemd-timesync/  ~vde2-net~avahi-autoipd/     ~clickpkg           ~dnsmasq/           ~irc                ~mail/              ~mpd/               ~pdnsd/             ~root/              ~syncache/          ~timidity/          ~whoopsie~backup/            ~colord/            ~epmd               ~jetty/             ~man/               ~muroard/           ~postgres/          ~rtkit/             ~sys/               ~tomcat8            ~www-data/~bin/               ~daemon/            ~festival           ~libvirt-dnsmasq/   ~mdm/               ~mysql              ~proxy/             ~saned              ~syslog             ~trafficserver      ~bind/              ~Debian-exim/       ~games/             ~libvirt-qemu/      ~memcache           ~news               ~pulse              ~speech-dispatcher  ~systemd-bus-proxy/ ~uml-net            ~cat/               ~debian-spamd/      ~gitdaemon          ~lightdm/           ~messagebus/        ~nobody             ~radvd              ~sshd/              ~systemd-network    ~uucp               cat @ mint-kitty : /bin $ cd ~systemd-resolve bash: cd: /run/systemd/resolve: No such file or directory1 | cat @ mint-kitty : /bin $ cd ~rediscat @ mint-kitty : /var/lib/redis $ cd ~clamavcat @ mint-kitty : /var/lib/clamav $ cd ~ircbash: cd: /var/run/ircd: No such file or directory1 | cat @ mint-kitty : /var/lib/clamav $ cd ~gnatsbash: cd: /var/lib/gnats: No such file or directory1 | cat @ mint-kitty : /var/lib/clamav $ cd ~sshdcat @ mint-kitty : /var/run/sshd $ cd ~nobodybash: cd: /nonexistent: No such file or directoryObviously, <TAB> represents the TAB key sending the byte at ASCII 9, not that actual text.I've left in my PS1 prompt to show the current path and the return codes. My question is, what's the relevance of these directories being autocompleted from ~?I've created a table of these and where they point, to better understand them (but I'm just more confused now).thing            points-at?===========================================~ais             ENOENT /home/ais/         # user ais uid=156(ais) gid=163(ais) groups=163(ais) does not have an entry in /home/~avahi           /var/run/avahi-daemon/~avahi-autoipd   /var/lib/avahi-autoipd/~backup          /var/backups/~bin             /bin/~bind            /var/cache/bind/~cat             /home/cat/~clamav          /var/lib/clamav/~cl-builder      /usr/share/common-lisp//  # two slashes~clickpkg        ENOENT /nonexsistent/     # yes, really~colord          /var/lib/colord/~daemon          /usr/sbin/                # ??~Debian-exim     /var/spool/exim4/         # ??~debian-spamd    /var/lib/spamassassin/~debian-tor      /var/lib/tor/~dirmngr         /var/cache/dirmngr/~dnsmasq         /var/lib/misc/             # ??~epmd            /var/run/epmd/~festival        ENOENT /home/festival      # user festival uid=131(festival) gid=29(audio) groups=29(audio) does not have an entry in /home/~games           /usr/games/                # ???~gitdaemon       ENOENT /nonexistent/~gitlog          ENOENT /nonexistent/~gnats           /var/lib/ircd/~jetty           /usr/share/jetty8/~libvirt-dnsmasq /var/lib/libvirt/~libvirt-qemu    /var/lib/libvirt/~lightdm         /var/lib/lightdm/~list            ENOENT /var/list/~lp              ENOENT /var/spool/lpd/~mail            /var/mail/~man             /var/cache/man/~mdm             /var/lib/mdm/~memcache        ENOENT /nonexistent/~messagebus      /var/run/dbus~mixmaster       /var/lib/mixmaster/~monkeysphere    /var/lib/monkeysphere/~mpd             /var/lib/mpd/~muroard         /var/lib/muroard/~mysql           ENOENT /nonexistent/~nobody          ENOENT /nonexistent/~ntp             ENOENT /home/ntp            # user ntp uid=107(ntp) gid=114(ntp) groups=114(ntp) does not have an entry in /home/~oident          /                           # ????~pdnsd           /var/cache/pdnsd/~postgres        /var/lib/postgresql/~proxy           /bin/~pulse           ENOENT /var/run/pulse~radvd           ENOENT /var/run/radvd~redis           /var/lib/redis~roard           /var/lib/roard~root            /root~rtkit           /proc~saned           ENOENT /var/lib/saned~speech-dispatcher ENOENT /var/run/speech-dispatcher~sshd            /var/run/sshd~stunnel4        ENOENT /var/run/stunnel4~sync            /bin/~syncache        /var/run/syncache-drb/~sys             /dev/                       # ???~syslog          ENOENT /home/syslog         # user syslog uid=104(syslog) gid=109(syslog) groups=109(syslog),4(adm) does not have an entry in /home/~systemd-bus-proxy /run/systemd/~systemd-network ENOENT /run/systemd/netif/~systemd-resolve ENOENT /run/systemd/resolve/~systemd-timesync /run/systemd/~timidity        /etc/timidity/~tomcat8         ENOENT /usr/share/tomcat8/~trafficserver   ENOENT /var/run/trafficserver/~uml-net         ENOENT /home/uml-net/       # user uml-net uid=146(uml-net) gid=155(uml-net) groups=155(uml-net) does not have an entry in /home/~uucp            ENOENT /var/spool/uucp/~uuidd           /run/uuidd/~vde2-net        ENOENT /var/run/vde2/~whoospie        ENOENT /nonexistent/~www-data        /var/wwwThe thing column is the entry shown by ~<TAB><TAB>. points-at is either the directory thing points to, or the nonexistent place thing points to. For instance, ~cat gives bash: /home/cat: Is a directory, so ~cat -> /home/cat but ~clickpkg gives bash: /nonexistent: No such file or directory, so ~clickpkg -> ENOENT /nonexistent/.I've presented all the data I've got. What's going on here? Is ~ being secretly expanded to something?
What's the relevance of these bash completion suggestions?
bash;autocomplete;directory structure
A ~user is the $HOME directory for that user.That's the list of directories in ~ augmented by all this (second column):awk -F : '{printf( %15s \t %-20s\n,$1,$6)}' /etc/passwdFrom man bash (search for Tilde Expansion)Tilde Expansion  If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the tilde are treated as a possible login name.  ... the tilde-prefix is replaced with the home directory associated with the specified login name.