https://blog.csdn.net/damontive/article/details/50352722
參考:http://www.cnblogs.com/zhangze/articles/1832542.html
以前一直覺得export可有可無,雖然知道export是干嘛的,不就是把本地變量變成全局變量么(實際中叫環境變量),但是感覺好像沒有這貨也沒影響,今天看了這篇博文,終於恍然大悟。用自己的語言,思維方式重新整理一遍
首先說明兩個概念:
父shell與子shell,從shellA中啟動一個shell,稱之為shellB。 shellA為父shell,shellB為子shell。
最容易理解的情況就是在一個shell中執行一個gnome-terminal命令(不同桌面環境命令不一樣),彈出一個新的shell
最常見的情況是在當前shell下執行腳本,這個腳本實際上是在子shell中執行的
概念說完了,感覺啰嗦了, 說實驗
這里用最常見的情況舉例:在當前shell下執行腳本
現在有三個腳本
exp1.sh
var="hello,world"
exp2.sh
var="hello,world"
export var
test.sh
echo $var
實驗1:
source exp1.sh
echo $var
bash test.sh
結果:
實驗2:
source exp2.sh
echo $var
bash test.sh
結果:
可以看到在當前shell下執行echo $var是沒有任何問題的,但是執行bash test.sh時,實驗1是沒有任何輸出(找不到var這個變量)實驗2 echo出了var的值。因為實驗2中exp2.sh加入了export,所以var變成了環境變量,所以var對子shell是可見的,而實驗1中由於沒有export var,所以var是個局部變量,並不能被子shell看到
再啰嗦幾句, linux中在 profile 或者 bashrc 或者其他類似的文件中設置環境變量時(比如PATH),如果沒有export,那么只能在直接啟動的shell中起作用,如果在當前shell下運行腳本或者直接啟動一個子shell,因為實際上是局部變量。子shell看不見的,所以就gg了
————————————————
版權聲明:本文為CSDN博主「胡LiuJia」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/damontive/article/details/50352722