Bash
PS1真的是環境變數嗎?
我一直認為這
PS1
是一個環境變數。但是當我檢查 Ubuntu 的預設值並.bashrc
檢查PS1
grep PS1 /etc/skel/.bashrc
沒有
export PS1
。如果沒有導出,是否意味著它不是環境變數?
該
PS1
變數以及影響 shell 的一些其他變數(請參閱手冊中稱為Shell 變數的部分bash
)不會導出,因此不是環境變數。
PS1
並且一些其他變數不是環境變數,因為它們不必傳遞給子程序。例如,該PS1
變數讓目前 shell 知道主提示符應該是什麼樣子,這可能不是任何其他程序都會感興趣的東西。對於像HISTFILE
和之類的變數也是如此PROMPT_COMMAND
。除非 shell 是互動式的,否則 shell 在啟動時bash
也會取消設置變數。PS1
作為一般經驗法則,導出子程序需要查看的變數。不要導出僅在目前 shell 會話中使用的變數(由 shell 本身或由您的腳本或互動式命令)。
另請注意,即使您的 shell 的初始化文件不導出特定變數,該變數仍可能由 shell 的父級導出。這就是
PATH
變數的情況,例如,以及可能TERM
,SHELL
等等。這意味著這些變數通常不必再次導出(除非您取消設置它們)。該
IFS
變數決定了 shell 應該如何執行分詞以及read
內置實用程序的行為。Shell 通常會重置此變數,因為使用環境中的變數值可能會產生意外和令人驚訝的效果。一般來說,IFS
永遠不應該被導出。最好不要設置和導出CDPATH
變數,因為它會影響cd
命令的行為,這可能會破壞腳本的預期行為。