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

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

我一直以为这PS1是一个环境变量。但是当我检查 Ubuntu 的默认值.bashrc并检查PS1

grep PS1 /etc/skel/.bashrc

没有export PS1

如果没有export,是不是说明它不是环境变量?

答案1

PS1变量以及影响 shell 的其他一些变量(请参阅称为外壳变量bash手册中),不导出,因此不是环境变量。

PS1其他一些变量不是环境变量,因为它们不必传递给子进程。例如,该变量让当前 shell 知道主提示符应该是什么样子,这可能不是任何其他程序感兴趣的东西。对于像和 之PS1类的变量也是如此。除非 shell 是交互式的,否则shell还会在启动时取消设置该变量。HISTFILEPROMPT_COMMANDbashPS1

作为一般经验法则,导出子进程需要查看的变量。不要导出仅在当前 shell 会话中使用的变量(无论是由 shell 本身还是由脚本或交互式命令)。

另请注意,即使 shell 的初始化文件不导出特定变量,该变量仍可能由 shell 的父级导出。PATH例如,变量以及可能TERM和其他变量就是这种情况SHELL。这意味着这些变量通常不必导出再次(除非您取消设置它们)。

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

相关内容