PS1真的是一个环境变量吗?

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例如,变量以及可能TERMSHELL其他变量就是这种情况。这意味着这些变量通常不必再次导出(除非您取消设置它们)。

IFS变量确定 shell 应如何执行分词以及read内置实用程序的行为。shell 通常会重置此变量,因为使用环境中的变量值可能会产生不需要的和令人惊讶的效果。一般来说,IFS绝对不应该出口。最好不要设置和导出CDPATH变量,因为它会影响命令的行为cd,这可能会破坏脚本的预期行为。

  • @bobdylan参见[shell脚本中的变量有命名约定吗?](https://unix.stackexchange.com/q/42847)(摘要:环境变量或系统或shell引入的变量通常是大写的)。 (3认同)