bash中的波浪线扩展
扩展触发条件
如果一个token
以波浪线~
开头,以第一个没有被转义或者引用的斜杠/
或token
的末尾结束,且中途的字符都没有被引用,那这一段称为波浪线前缀tilde prefix
,在波浪线前缀中不包含波浪线和斜杠的部分在波浪线扩展中被称之为登录名login name
1 | ~ #登录名为空 |
扩展行为
波浪线前缀会被扩展为登录名所在用户的家目录,如果登录名为空则扩展为当下shell的$HOME
即当下用户的家目录。如果登录名所代表的用户不存在,则波浪线前缀保持不变
1 | echo ~root/tmp |
如果登录名为+
,波浪线前缀会被扩展为$PWD
,如果登录名为-
,波浪线前缀会被扩展为$OLDPWD
,$OLDPWD
没有被设置则波浪线前缀保持不变。
1 | echo ~- #此时shell的$OLDPWD未被设置 |
如果登录名为+N
或N
,波浪线前缀会被扩展为从目录栈DIRSTACK
从栈顶往下第N
个目录值,如果登录名为-N
则为从栈底往上第N
个目录值,N
从0开始,如果这个目录值不存在,则波浪线前缀保持不变
1 | cd /tmp |