Bash

PS1真的是環境變數嗎?

  • September 18, 2022

我一直認為這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變數的情況,例如,以及可能TERMSHELL等等。這意味著這些變數通常不必再次導出(除非您取消設置它們)。

IFS變數決定了 shell 應該如何執行分詞以及read內置實用程序的行為。Shell 通常會重置此變數,因為使用環境中的變數值可能會產生意外和令人驚訝的效果。一般來說,IFS永遠不應該被導出。最好不要設置和導出CDPATH變數,因為它會影響cd命令的行為,這可能會破壞腳本的預期行為。

引用自:https://unix.stackexchange.com/questions/717644