bob*_*lan 9 bash environment-variables
我一直以为这PS1是一个环境变量。.bashrc但是当我检查Ubuntu 的默认值并PS1检查时
grep PS1 /etc/skel/.bashrc
Run Code Online (Sandbox Code Playgroud)
没有export PS1。
如果没有export,是不是说明它不是环境变量?
Kus*_*nda 14
该PS1变量以及影响 shell 的其他一些变量(请参阅手册中名为“Shell 变量”bash的部分)不会导出,因此不是环境变量。
PS1其他一些变量不是环境变量,因为它们不必传递给子进程。例如,该变量让当前 shell 知道主提示符应该是什么样子,这可能不是任何其他程序感兴趣的东西。对于像和 之类PS1的变量也是如此。除非shell是交互式的,否则 shell 还会在启动时取消设置该变量。HISTFILEPROMPT_COMMANDbashPS1
作为一般经验法则,导出子进程需要查看的变量。不要导出仅在当前 shell 会话中使用的变量(无论是由 shell 本身还是由脚本或交互式命令)。
另请注意,即使 shell 的初始化文件不导出特定变量,该变量仍可能由 shell 的父级导出。PATH例如,变量以及可能TERM和SHELL其他变量就是这种情况。这意味着这些变量通常不必再次导出(除非您取消设置它们)。
该IFS变量确定 shell 应如何执行分词以及read内置实用程序的行为。shell 通常会重置此变量,因为使用环境中的变量值可能会产生不需要的和令人惊讶的效果。一般来说,IFS绝对不应该出口。最好不要设置和导出CDPATH变量,因为它会影响命令的行为cd,这可能会破坏脚本的预期行为。