为什么 FPATH 没有在“env”输出中列出?

为什么 FPATH 没有在“env”输出中列出?

我正在运行zsh(在 MacOS 上),我刚刚了解到$fpath。像往常一样,我然后输入env以检查它是否参与我的环境,但令我惊讶的是它不在那里!然而,$FPATH( 和$fpath) 定义为:

% echo $fpath
/usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.9/functions

% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/share/zsh/site-functions:/usr/share/zsh/5.9/functions

这是打印出来的变量env

% env | sort | cut -d '=' -f 1
HOME
HOMEBREW_CELLAR
HOMEBREW_PREFIX
HOMEBREW_REPOSITORY
INFOPATH
LANG
LC_CTYPE
LOGNAME
MANPATH
OLDPWD
PATH
PWD
SHELL
SHLVL
SSH_AUTH_SOCK
TERM
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
TMPDIR
USER
XPC_FLAGS
XPC_SERVICE_NAME
_
__CFBundleIdentifier

我一直依赖于env控制我的环境变量(在 Bash 中),但显然这不是最好的选择(至少不再是)......

我应该使用不同的命令吗?或者如何列出全部我当前的用户/会话可以访问环境变量吗?

答案1

使用的变量通过外壳,就像您在这里处理的那样, or PROMPT, or HISTFILE, or IFS,不需要是环境变量,即它们永远不需要导出到带有 的环境中export

导出的变量对从 shell 执行的外部实用程序(例如实用程序)可见env,而未导出的变量对这些实用程序不可见。

shell 使用的变量不需要导出到环境中,因为 shell 已经可以访问它们的值。此外,不需要导出它们以便外部公用事业能够访问它们的值,因为这只会污染这些过程的环境,并且在某些罕见的情况下可能会造成干扰。

如果你想看全部外壳变量set,您可以使用不带参数的内置实用程序。

相关内容