我正在运行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
,您可以使用不带参数的内置实用程序。