bob dylan Asked: 2022-09-18 07:25:50 +0800 CST2022-09-18 07:25:50 +0800 CST 2022-09-18 07:25:50 +0800 CST PS1真的是环境变量吗? 772 我一直认为这PS1是一个环境变量。但是当我检查 Ubuntu 的默认值并.bashrc检查PS1 grep PS1 /etc/skel/.bashrc 没有export PS1。 如果没有导出,是否意味着它不是环境变量? environment-variables bash 1 个回答 Voted Best Answer Kusalananda 2022-09-18T07:47:01+08:002022-09-18T07:47:01+08:00 该PS1变量以及影响 shell 的一些其他变量(请参阅手册中称为Shell 变量的部分bash)不会导出,因此不是环境变量。 PS1并且一些其他变量不是环境变量,因为它们不必传递给子进程。例如,该PS1变量让当前 shell 知道主提示符应该是什么样子,这可能不是任何其他程序都会感兴趣的东西。对于像HISTFILE和之类的变量也是如此PROMPT_COMMAND。除非 shell 是交互式的,否则 shell 在启动时bash也会取消设置变量。PS1 作为一般经验法则,导出子进程需要查看的变量。不要导出仅在当前 shell 会话中使用的变量(由 shell 本身或由您的脚本或交互式命令)。 另请注意,即使您的 shell 的初始化文件不导出特定变量,该变量仍可能由 shell 的父级导出。这就是PATH变量的情况,例如,以及可能TERM,SHELL等等。这意味着这些变量通常不必再次导出(除非您取消设置它们)。 该IFS变量决定了 shell 应该如何执行分词以及read内置实用程序的行为。Shell 通常会重置此变量,因为使用环境中的变量值可能会产生意外和令人惊讶的效果。一般来说,IFS永远不应该被导出。最好不要设置和导出CDPATH变量,因为它会影响cd命令的行为,这可能会破坏脚本的预期行为。
该
PS1
变量以及影响 shell 的一些其他变量(请参阅手册中称为Shell 变量的部分bash
)不会导出,因此不是环境变量。PS1
并且一些其他变量不是环境变量,因为它们不必传递给子进程。例如,该PS1
变量让当前 shell 知道主提示符应该是什么样子,这可能不是任何其他程序都会感兴趣的东西。对于像HISTFILE
和之类的变量也是如此PROMPT_COMMAND
。除非 shell 是交互式的,否则 shell 在启动时bash
也会取消设置变量。PS1
作为一般经验法则,导出子进程需要查看的变量。不要导出仅在当前 shell 会话中使用的变量(由 shell 本身或由您的脚本或交互式命令)。
另请注意,即使您的 shell 的初始化文件不导出特定变量,该变量仍可能由 shell 的父级导出。这就是
PATH
变量的情况,例如,以及可能TERM
,SHELL
等等。这意味着这些变量通常不必再次导出(除非您取消设置它们)。该
IFS
变量决定了 shell 应该如何执行分词以及read
内置实用程序的行为。Shell 通常会重置此变量,因为使用环境中的变量值可能会产生意外和令人惊讶的效果。一般来说,IFS
永远不应该被导出。最好不要设置和导出CDPATH
变量,因为它会影响cd
命令的行为,这可能会破坏脚本的预期行为。