인수가 없는 set 명령

인수가 없는 set 명령

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 \[--'

기본적으로 모든 쉘 기능을 인쇄한다는 사실은 언급하지 않았지만 여러분이 발견하고 다른 사람들이 지적했듯이 쉘 기능도 인쇄합니다.

관련 정보