export

每一個shell有本身特有的變量(set)顯示的變量,這個和用戶變量是不一樣的,當前用戶變量和你用什麼shell無關,無論你用什麼shell都在,好比HOME,SHELL等這些變量,但shell本身的變量不一樣shell是不一樣的,好比BASH_ARGC, BASH等,這些變量只有set纔會顯示,是bash特有的,export不加參數的時候,顯示哪些變量被導出成了用戶變量,由於一個shell本身的變量能夠經過export 「導出」變成一個用戶變量linux

[root@linux ~]# aaa=bbbshell

[root@linux ~]# echo $aaa
bbbbash

[root@linux ~]# set|grep aaa
aaa=bbbspa

[root@linux ~]# env|grep aaa操作系統

[root@linux ~]# export aaa對象

[root@linux ~]# env|grep aaa
aaa=bbb繼承

擴展資料二:set、env、export——Linux中的環境變量命令進程

Linux是一個多用戶的操做系統。每一個用戶登陸系統後,都會有一個專用的運行環境。一般每一個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境 變量的定義。用戶能夠對本身的運行環境進行定製,其方法就是修改相應的系統環境變量。ip

什麼是環境變量test

環境變量是一個具備 特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。許多用戶(特別是那些剛接觸Linux的新手)發現這些變量有些怪異或者難以控制。其 實,這是個誤會:經過使用環境變量,你能夠很容易的修改一個牽涉到一個或多個應用程序的配置信息。

 

 

 一、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退出;二、一個shell中的系統環境變量纔會被複制到子 shell中(用export定義的變量);三、一個shell中的系統環境變量只對該shell或者它的子shell有效,該shell結束時變量消失 (並不能返回到父shell中)。三、不用export定義的變量只對該shell有效,對子shell也是無效的。

 

 

 

 

在shell腳本里面export的環境變量,在set裏面居然看不到。爲何在shell腳本里面用export設置環境變量以後,當shell執行完了,用set命令看不到呢?可是你若是直接在終端裏export 環境變量用set是看到的。

這裏要說一下shell的執行方法了,舉個例子來說:

一個shell腳本test.sh的內容爲:

【 #!/bin/bash

      export AA=123】

當咱們執行test.sh的時候,是當前終端所在的shell fork一個子shell而後執行test.sh的,執行完了再返回終端所在的shell。明白這點,就容易理解了,咱們在test.sh設置了AA環境 變量,它只在fork出來的這個子shell中生效,子shell只能繼承父shell的環境變量,而不能修改父shell的環境變量,因此test.sh結束後,父進程的環境就覆蓋回去。因此在test.sh以後完以後,咱們用set命令是看不了AA這個環境變量的值的。

那有什麼辦法可讓腳本的環境變量在腳本執行以後仍然對當前終端存在呢?用sorcue 或者.(dot) 。明確告訴shell不要fork執行腳本,而是在當前的shell執行,這樣環境變量就能夠保存下來了。

source命令用法:

source Filename (一般用「.」來代替)

source test.sh 與 .test.sh是等效的。

【補充】

source命令與shell scripts的區別是,source在當前bash環境下執行命令,而scripts是啓動一個子shell來執行命令。這樣若是把設置環境變量(或alias等等)的命令寫進 scripts中,就只會影響子shell,沒法改變當前的BASH,因此經過文件(命令列)設置環境變量時,要用source 命令。

相關文章
相關標籤/搜索