1. 程式人生 > >source和export區別

source和export區別

背景:當我們啟動linux後,將啟動一個使用者shell,在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell指令碼程式,執行shell指令碼時,系統將建立一個子shell用來執行,每個shell都是由某個shell(稱為父shell)派生的

#a.sh

#! /bin/sh
echo “hello world!”
echo "PID of this script: $$"
echo "PPID of this script: $PPID"
[email protected]:~$ ./a.sh 
hello world!
PID of this script: 23875
PPID of this script: 20654

從上面的輸出可以看到程序號不同。

 

假如有一個指令碼:

#test.sh

#!/bin/sh

export TEST_DIR=/home/test

直接執行./test.sh

[email protected]:~$ ./test.sh
[email protected]:~$ echo $TEST_DIR   

[email protected]:~$

發現沒有值,因為子shell中並不會影響到父shell
 

但是假如變成這樣

[email protected]:~$ source ./test.sh
[email protected]
:~$ echo $TEST_DIR /home/test

發現可以輸出了.source(或點)命令通常用於重新執行剛修改的初始化文件,sh_profile和 .profile 等等.使它立即生效而不用去建立新的子shell。

 

小結:

1 export是將一個變數匯出,以給其他shell程式使用,能影響子shell

2 source 作用在本shell程式中執行,不啟動子shell,所以可以影響指令碼的父shell