"env" 출력에 FPATH가 나열되지 않는 이유는 무엇입니까?

"env" 출력에 FPATH가 나열되지 않는 이유는 무엇입니까?

(MacOS에서) 실행 zsh중이고 방금 배웠습니다.$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

나는 항상 envBash에서 환경 변수를 제어하는 ​​데 의존해 왔지만 분명히 그것이 최선의 선택은 아닙니다(적어도 더 이상은 아닙니다).

다른 명령을 사용해야 합니까? 또는 목록을 작성하는 방법모두현재 사용자/세션이 환경 변수에 액세스할 수 있나요?

답변1

사용된 변수쉘을 통해, 여기에서 다루는 것처럼 or PROMPT, 또는 HISTFILE, 또는 은 IFS환경 변수일 필요가 없습니다. 즉, 를 사용하여 환경으로 내보낼 필요가 없습니다 export.

내보낸 변수는 쉘에서 실행되는 외부 유틸리티(예: 유틸리티)에 표시되지만 env내보내지 않은 변수는 이러한 유틸리티에 표시되지 않습니다.

셸에서 사용하는 변수는 해당 값이 이미 셸에서 액세스 가능하므로 환경으로 내보낼 필요가 없습니다. 또한 외부 유틸리티가 해당 값에 액세스할 수 있도록 해당 값을 내보낼 필요가 없습니다. 이는 이러한 프로세스의 환경을 오염시키고 드문 경우에 간섭을 일으킬 수 있기 때문입니다.

모두 보고 싶다면쉘 변수set, 매개변수 없이 내장 유틸리티를 사용할 수 있습니다.

관련 정보