【shell】shell中的環境變量與本地變量

希望各位不要白piao,點個贊或者刷個評論再走,還有【禁止轉載】
*這篇文章就是講解變量在shell中是什麼樣的(我手頭的筆記比較多,只能慢慢發,如果真的有某一方面特別的需求,可以在評論中回覆,如果我有相關的資料我會優先發出來)
@environment: uninx和Linux是存在差異的,不過大部分命令是差不多的,本文的例子在Iterm2+omyzsh+Mac系統下運行的,並未使用remote端服務器。不過大同小異,工作中其實也是這個樣子的。

變量

按照慣例,Shell變量由全大寫字母加下劃線組成,有兩種類型的Shell變量:

1.環境變量

環境變量可以從父進程傳給子進程,因此Shell進程的環境變量可以從當前Shell進程傳給fork(拆分)出來的子進程。用printenv命令可以顯示當前Shell進程的環境變量。
printenv
printenv運行結果
我們之前說過sh xxxx.sh 和 source xxx.sh的區別,如果出現了一些變量是空的情況你要了解爲什麼沒有拿到這個變量。如果不是很懂執行shell腳本的區別,看我另一篇文章如何執行shell腳本

2.本地變量

只存在於當前Shell進程(這就是本地變量和環境變量的區別),用set命令可以顯示當前Shell進程中定義的所有變量(包括本地變量和環境變量)和函數。

設置本地變量(腳本語法裏面會經常用到)

環境變量是任何進程都有的概念,而本地變量是Shell特有的概念。在Shell中,環境變量和本地變量的定義和用法相似。在Shell中定義或賦值一個變量:
VARNAME=value
以上就是把value的值賦值給VARNAME,注意等號兩邊都不能有空格,否則會被Shell解釋成命令和命令行參數。

導出本地變量爲環境變量

一個變量定義後僅存在於當前Shell進程,它是本地變量,用export命令可以把本地變量導出爲環境變量,定義和導出環境變量通常可以一步完成:
export VARNAME=value
也可以分兩步完成:
VARNAME=value
export VARNAME
@experience:應用場景也挺多的,比如你要寫一個每天都運行的任務我們一般稱爲跑批job,那麼其中一個腳本的運行結果可能稱爲多個下游任務所用到(下游任務就是a腳本完成後會拉起b腳本,此時b腳本就是a腳本的下游任務),這種情況下我們可以選擇把這個值變成一個跑批環境的環境變量,當然這個環境要相對獨立於其他的機器,大廠很多的跑批框架會有這種設計,這裏瞭解一下它的語法就好。

刪除已定義的環境變量或本地變量。

unset VARNAME
如果一個變量叫做VARNAME,用\${VARNAME}可以表示它的值,在不引起歧義的情況下也可以用\$VARNAME表示它的值。一般我建議用第一種帶{}的方式進行表示,因爲複雜的shell腳本摻雜sql真的不容易看,你寫的東西是爲了讓別人看懂,所以個人建議第一種。通過以下例子比較這兩種表示法的不同:
echo $SHELL
注意,在定義變量時不用$,取變量值時要用$。和C語言不同的是,Shell變量不需要明確定義類型,事實上Shell變量的值都是字符串,比如我們定義VAR=45,其實VAR的值是字符串45而非整數。Shell變量不需要先定義後使用,如果對一個沒有定義的變量取值,則值爲空字符串。如果用過python這個地方十分好理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章