51

What does the ~ mean in an absolute file path?

I see this in the output of things like build scripts but the path does not exist.

3

6 Answers 6

38

Normally it means the user's home directory e.g. ~mike/ would be the user mike's home directory, ~/ would be your own home directory. However, it is unclear to me whether ~/ and ~mike/ should be considered absolute or relative; it seems to depend on the definition given (if anyone can come up with an authorative reference, please post a comment).

Note that I'm talking about Unix based systems here.

See http://en.wikipedia.org/wiki/Home_directory#Unix

9
  • 3
    They are absolute, because they are synonyms for absolute paths: on UNIX, the absolute path can be inferred from the contents of the /etc/login file. The expansion is traditionally done by the shell, but any language that has pretensions to be "scripting" will do this as well. Nov 16, 2010 at 11:20
  • 2
    +1: I didn't know about the ~username/ thing.
    – Wuffers
    Nov 16, 2010 at 13:21
  • 3
    Interestingly, Windows PowerShell also accepts ~ as a synonym for the user's home directoy.
    – Joey
    Nov 16, 2010 at 13:51
  • 1
    Jeffery Snover has said that PowerShell was originally based around VIM/EMACs Nov 16, 2010 at 22:21
  • 1
    @Charles Stewart arguably at least ~/ is relative as it depends on the users context. Also some references define a absolute path as one given from the root of the filesystem, which these obviously aren't. If you have a reference for your statement, please share! Nov 17, 2010 at 17:02
27

Actually, both of the answers by Adrian Mouat and studiohack are true.
In operating systems with limited naming convention (Older version of Windows/DOS etc') it signifies a long name.

e.g. "c:\program files\" is equivalent to "c:\progra~1\"

In some operating systems (namely Unix) it means home-dir (and might be seen as an absolute but not canonical path).
e.g."/a/vol01/usr/mike/" might be shortened to "~/mike/"
* where 'usr' is the home dir.

4
  • 2
    In the context of build scripts, it is probably the Unix-centric version. Nov 16, 2010 at 11:22
  • 2
    Unix paths usually use forward-slashes rather than backslashes. Nov 16, 2010 at 13:52
  • @torbengb, true...opps
    – Eran
    Nov 16, 2010 at 14:05
  • 1
    A small correction to Xenorose's otherwise excellent answer. File names like "progra~1" are not for older OSs. My Windows 7 system still uses them. (Do dir /x to see.) This is a legacy feature that supports old software that doesn't know about the long file names in modern systems. Old software thinks all filenames follow the 8.3 convention. When a file name doesn't work with this convention, the file system automatically creates a second, 8.3 compatible name. Sep 6, 2012 at 6:14
13

On many file systems, a file name will contain a tilde (~) within each component of the name that is too long to comply with 8.3 naming rules.

Source: Naming Files, Paths, and Namespaces - Short vs. Long Names - MSDN

(Part-way down the page...)

1
  • Hmm, doesn't quite work for names that contain dots. (e.g. 192.168.1.1 or somefile.namewithdot)
    – Pacerier
    Oct 15, 2015 at 20:38
6

And if you do ASP.NET programming it means the top level of the website; rather than navigating using ../../images/some_image.jpg (and getting your nesting level wrong!) you can simply say ~/images/some_image.jpg

2
  • 2
    /images/some_image.jpg should take you to the root of any web site. What additional functionality does the tilde provide in ASP.NET?
    – Sonny
    Nov 16, 2010 at 16:12
  • 8
    ~ takes you to the web application root which is not the same as the web site root if you're using a virtual directory. For example, if your website is installed on myserver in virtual directory myapp, ~/images/myimage.jpg will resolve to myserver/myapp/images/myimage.jpg. See msdn.microsoft.com/en-us/library/ms178116.aspx.
    – MCS
    Nov 16, 2010 at 16:18
2

More about Windows:

  1. If hidden file name starts with '~' then Windows Explorer process it as system hidden file. More info in Why are hidden files with a leading tilde treated as super-hidden?

  2. If short file/directory name contains '~' (like "c:\ololoo~1") it is possible for corresponding long name of this file/directory to exceed maximum length (MAX_PATH=260). Developers should workarond this with "\\?\" prefix (even on newer Windows 10 as user can disable ">260"-long paths support with LongPathsEnabled registry parameter or with "Enable NTFS long paths" group policy). Example for this workaround using C# can be found in ZetaLongPaths library sources.

1

Here is a couple of hints that can help you to figure it out better:

$ readlink -f ~

$ echo $HOME

Note: $ is a convention to specify the user command line prompt, it is not a part of the commands.

2
  • 'readlink' is not recognized as an internal or external command.
    – Pacerier
    Oct 15, 2015 at 20:27
  • @vtest that's because the example in this comment is for unix-based systems, not Windows.
    – dudewad
    Mar 14, 2016 at 20:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .