2013-09-24 37 views
7

我在处理bash脚本语言时遇到了一些奇怪的问题。 这里是:bash脚本与pwd的尴尬

PWD=${pwd} 
# several commands 
cd /etc/nginx/sites-enabled/ 
# more commands 
cd $PWD 
# I expect that I returning to my directory, 
# but $PWD contains current dir - /etc/nginx/sites-enabled/ 

这behaiveour是某种懒惰 - $ PWD店命令,其计算当前目录下,我们调用$ PWD的时刻返回。 但我想存储字符串变量。怎么做?

回答

21

PWD是一个环境变量,在更改目录时会发生变化。

使用不同的名称为变量,

如:

MYPWD=${PWD} #or MYPWD=$(pwd) 
cd /etc/nginx/sites-enabled/ 
cd $MYPWD 
+0

只是让它在这里作为一个文档问题。大约一个半小时来解决这个问题。 –

+3

为变量使用小写(或混合大小写)名称是一个好主意,以避免这样的冲突... –

2

尝试:

PWD=`pwd` 

或者:

PWD=$(pwd) 

两个表达式将执行PWD命令并存储在壳可变PWD命令输出。网上有很多关于何时使用每种风格的讨论。我记得的一点是,“$(cmd)”方法允许嵌套命令,例如,

CURRENT_BASENAME=$(basename $(pwd)) 

编辑 - 我发现PWD是一个内置的shell变量,总是扩展到当前的工作目录。

+1

号我竟被浓缩并没有提到,那$ PWD - 是一个系统变量,总是指向当前目录。 'HPWD = $(pwd)'工作得很好。 –