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