bash中的directory stack
Bash中有directoy stack,可以认为这只是为了方便工作提供的一种记录以前目录的方法,不过,需要说明的是:cd 命令会替换目录栈顶元素,而不是将新目录入栈。应该说,当前目录和栈顶目录一直保持自动一致。
dirs可以查看目录栈中的目录,例如我们当前在/home/shaoting目录,我们调用dirs得到:
/home/shaoting /root /var
第一个是我们的当前目录,也是栈顶元素,而后的2个目录才是目录栈顶后的目录。我们cd ..后,再次dirs结果为:
/home /root /var 可见cd命令只是修改了目录栈顶元素。
我们调用popd后,目录栈的顶层元素/home被出栈,而/root成为新栈顶元素并替换了当前目录变量,调用dirs结果显示:
/root /var 其中的/root是当前目录变量的值也是当前目录栈顶元素。
如果再次调用popd,root会出栈,var会成为目录栈顶,从而如果调用dirs会得到如下结果:
/var 这里目录栈只有一个元素,如果再调用popd,唯一的元素就会出栈,目录栈就会空,就会提示目录栈已空,系统会自动将当前目录及这个最后的目录再次入栈,或者可以说压根就不能在目录栈中只含有一个元素时出栈。
如果当前在/home/shaoting目录,调用dirs显示/home/shaoting,目录栈只有一个元素。然后调用pushd x命令可以将目录x入栈,如pushd /var,表示将var入栈,并将当前目录变量改为/var。之后调用dirs则显示:
/var /home/shaoting。
知道了directory stack就可以弄清楚Bash中的tilde expansion了:
~ 当前用户的home目录
~user 用户user的home目录
~+ 当前目录,即PWD的值
~+N 从栈顶开始,栈顶为0,向栈底数第N个目录,对应dirs输出结果中从左向右排列中第N个目录(第0个目录是栈顶目录)
~-N 方向相反,从栈底数第N个目录,栈底为第0元素。
这就是符号扩展,Bash中的tilde expansion内容如下:
~
- The value of
$HOME
~/foo
- $HOME/foo
~fred/foo
- The subdirectory
foo
of the home directory of the user
fred
~+/foo
- $PWD/foo
~-/foo
- ${OLDPWD-'~-'}/foo
~
N- The string that would be displayed by ‘dirs +N’
~+
N- The string that would be displayed by ‘dirs +N’
~-
N- The string that would be displayed by ‘dirs -N’
阅读(1277) | 评论(0) | 转发(0) |