2013-09-24 40 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)'工作得很好。 –