我正在运行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 中),但显然这不是最好的选择(至少不再是)......
我应该使用不同的命令吗?或者如何列出当前用户/会话可访问的所有环境变量?
shell使用的变量,如您在此处处理的变量, or
PROMPT
、 orHISTFILE
、 orIFS
,不需要是环境变量,即它们永远不需要导出到环境中export
。导出的变量对从 shell 执行的外部实用程序(例如实用程序)可见
env
,而未导出的变量对这些实用程序不可见。shell 使用的变量不需要导出到环境中,因为 shell 已经可以访问它们的值。此外,不需要导出它们以便外部公用事业能够访问它们的值,因为这只会污染这些过程的环境,并且在某些罕见的情况下可能会造成干扰。
如果您想查看所有shell 变量,您可以使用
set
不带参数的内置实用程序。