bash shell的學習路程(二)
環境變數的功能:主資料夾的變換、提示符的顯示、執行檔案查詢的路徑等!
查詢環境變數:env命令--->enviorment
關注點:HOME、SHELL、HISTSIZE、MAIL、PATH(冒號隔開)、LANG、RANDOM(隨機數生成器--->[0,327667]的自然數)
需求1:除了查詢bash中的環境變數(小寫),以及操作介面有關的變數(大寫),還有使用者自定義的變數(小寫)?--->set 命令
set命令中幾個重要變數(非環境變數)的解釋:
(1)PS1:命令提示符的設定---->當每次按下[Enter]按鍵去執行某個命令時,要顯示提示符的時候就會主動讀取此變數
常見的:[\[email protected]\h \W]\$------->[[email protected] ~]$----->詳見306頁!
(2)$:代表目前這個shell的執行緒代號---->PID------>echo $$
(3)?:上一個執行命令的回傳碼,---->一般來說執行命令的時候都會回傳一個執行後的回傳碼,成功則返回0,錯誤則非0!
需求2:將自定義變數轉換成環境變數----->語法: export 變數名稱------>就可以讓該變數繼續存在於子程序中!
思考:自定義變數和環境變數的差異是什麼?
差異點:該變數是否能被子程序所繼續引用
子程序:登入Linux,讀取/etc/passwd獲取當前使用者預設的bash,此時是一個獨立的程序,被稱為PID----->在此bash下執行某個命令都是由這個bash衍生出來的,那些被執行的命令就是子程序!
子程序的特點:子程序只會繼承父程序的環境變數,不會繼承父程序的自定義變數!
應用場景:在引用自己的變數設定給後來呼叫的檔案或其他程式!
具體:主控檔案後面呼叫其它附屬檔案(類似函式的功能),但是主控檔案與附屬檔案都有相同的變數名稱,解決辦法:原本的第一個檔案中設定export變數,後面呼叫的變數就可以使用這個變量了,非常適合於shell scripts!
補充1:export 不接變數
補充2:環境變數轉成自定義變數---->declare
---------------------------------------------------------------------
查詢Linux支援的語系:locale -a
檢視語系變數:locale----->重點關注LANG
Linux的終端機介面(tty1~tty6)--->黑視窗--->如果設定LANG=zh_TW.big5設定生效後,用man 或者其它資訊輸出時會有亂碼!
原因:終端機介面的環境沒有中文的編碼能力,所以會產生亂碼!但是Windows主機中以遠端連線伺服器的軟體連線到主機,命令列的介面是可以看到中文的,所以此時要在LANG設定中文編碼!
語系檔案的位置:/usr/lib/locale/這個目錄中
-----------------------------------
變數的有效範圍:
前提:export命令就存在變數範圍的概念!--->環境變數和自定義變數的作用域!
問題3:環境變數的資料為什麼可以被子程序所引用?
記憶體配置問題
--->啟動一個shell------>作業系統分配一個記憶塊(記憶體空間)給shell使用,此記憶體中的變數可讓子程序取用;
--->父程序利用export功能,可以讓自定義的變數內容寫入到此記憶塊中,作為環境變數(是臨時的嗎?);
--->當載入一個shell的時候(離開父程序,啟動子程序),子程序會將父shell中的環境變數所在的記憶塊匯入到自己的環境變數中!
--->讓變數在相關程序之間存在,更方便的操作環境!