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.
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:
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
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
/
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.