Chinaunix首页 | 论坛 | 博客
  • 博客访问: 986521
  • 博文数量: 200
  • 博客积分: 5011
  • 博客等级: 大校
  • 技术积分: 2479
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 15:07
文章分类

全部博文(200)

文章存档

2009年(12)

2008年(190)

我的朋友

分类:

2008-07-22 15:03:32

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) |
给主人留下些什么吧!~~