Table of Contents

Bash - Tilde (~) Expansion

About

The tilde expansion replaces the tilde with a path value which is dependent of the syntax.

If the tilde expansion fails, the word is unchanged.

Syntax

If a word begins with an unquoted tilde character (~), all of the characters preceding the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix.

~TildePrefix/

There is three forms of prefix:

Login Name

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. If this login name is:

If the login name is invalid, the word is unchanged.

Example:

echo ~daemon/test
/usr/sbin/test

The HOME is defined in the file /etc/passwd

~[+-]

This expansion context permits to set:

If the tilde-prefix is a:

Example:

echo ~+ # PWD
echo ~- # OLDPWD

~N[+-]

If the characters following the tilde in the tilde-prefix consist of a number N, optionally prefixed by a ‘+’ or a ‘-’, the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the dirs builtin invoked with the tilde-prefix as an argument.

If the characters following the tilde in the tilde-prefix consist of a number without a leading + or -, + is assumed.

Example:

dirs
/root /

echo ~0
/root

echo ~1
/

Management

variable assignment

Each variable assignment is checked for unquoted tilde-prefixes immediately following a : or the first =. In these cases, tilde expansion is also performed.

Consequently, one may use file names with tildes in assignments to:

and the shell assigns the expanded value.