2013-06-27 19 views
5

從我讀過的,bsh中的setenv和bash中的export是等價的。但是,我在與這兩者合作時發現了一些奇怪的問題。csh中「setenv」的範圍與bash中的「導出」相對

當我打開膩子並開始鍵入:

setenv TEMP yes 
echo $TEMP //this give me "yes" 

然後我去抨擊,並鍵入

echo $TEMP //this give me "yes" as well 

但是,如果我以相反的順序做,它不會給相同的結果。特別是,當我去第一bash和鍵入

export TEMP=no 
echo $TEMP //this give me "no" 

然後我回去CSH並鍵入

echo $TEMP // this give me "Undefined Variable" 

難道不應該給我「不」呢?我錯過了什麼嗎?

謝謝!

+1

你是什麼意思「然後我回到csh」?你到底輸入什麼「回到csh」? – rici

+0

csh是我的登錄shell,因此當我在bash中輸入「exit」時,它會返回到csh。 –

+2

沒錯。當你導出一個變量時,它會被導出到子項,但不會被導出到父項。當你輸入「exit」時,所有的變量消失。 – rici

回答

8

導出變量意味着將該變量的副本放置到任何新創建的子進程的環境中。它是變量的副本;如果子進程修改該變量,則父進程不會看到該修改。此外,如果一個孩子輸出一個變量,它不會在父類中顯示。

因此,你的兩種情況是不對稱的。當你在csh中啓動時,導出一個變量,然後啓動bash,bash會看到導出的變量。當你在bash中導出一個新變量並從bash退出回到csh時,在bash會話中創建的所有變量消失。

如果你是一個可變的出口在bash,然後啓動一個孩子CSH(通過鍵入csh),你幾乎肯定會看到導出的變量。

+0

具有很多意義!謝謝! –