env
모든 환경 변수를 표시하려고 했습니다 . 우연히 명령을 실행했는데 set
콘솔에 스크립트를 "cat"한 것 같습니다. 왜 이런 일이 발생합니까?
이것참조 페이지설명하지 않는 것 같습니다.
If no options or arguments are supplied, set displays the names
and values of all shell variables
답변1
set
쉘 내장 명령입니다. 명령줄에서 이를 실행하면 현재 환경의 모든 내용이 표시됩니다. 여기에는 로드한 모든 기능이 포함됩니다. 대부분의 배포판에는 쉘 프로필에 최소한 몇 가지 유용한 기능이 포함되어 있으며, bash 완성 기능을 설치했다면 그 중 많은 기능을 갖게 될 것입니다.
env
바이너리입니다. 다른 명령과 마찬가지로 셸에 의해 로드되고 실행됩니다. 따라서 내보낸 환경 변수만 볼 수 있으며, 이로 인해 셸 환경의 모든 기능이 제외됩니다.
답변2
Frank Schrijver가 자신의 의견에서 설명했듯이 bash 내장은 set
모든 쉘 변수(해당 런타임에만 "존재하는" 변수)와 모든 변수를 덤프합니다.쉘 기능도, 다시 함수가 초기화되어 해당 특정 쉘 프로세스에 존재합니다.
예를 들어 다음과 같은 기능이 표시됩니다.
_tilde ()
{
...
}
~
이는 bash 라인 편집기의 문자 에 대한 탭 완성을 제공하는 기능입니다 .
실제로 에 대한 bash 문서도 set
다음 명령을 실행하여 볼 수 있습니다.
man bash | less '+/^\s*set \[--'
기본적으로 모든 쉘 기능을 인쇄한다는 사실은 언급하지 않았지만 여러분이 발견하고 다른 사람들이 지적했듯이 쉘 기능도 인쇄합니다.