답변:
들어 POSIX 호환 쉘 (배쉬 포함), 표준 말한다 :
2.5.3 쉘 변수
변수는 환경에서 초기화되어야합니다 [...] 변수가 환경에서 초기화되면 즉시 내보내기가 가능하도록 표시되어야합니다. 수출 특별 내장을 참조하십시오. 변수 할당 등으로 새로운 변수를 정의하고 초기화 할 수 있습니다 [etc.]
그리고 약 export
:
export name[=word]...
쉘은 지정된 이름에 해당하는 변수에 내보내기 속성을 제공해야하며, 이로 인해 이후에 실행되는 명령 환경에있게됩니다.
따라서 쉘의 관점에서 변수 만 있습니다. 일부는 쉘이 시작될 때 환경에서 왔을 수 있으며, 일부는 쉘이 시작하는 프로세스 환경으로 내 보내질 수 있습니다.
( "환경"은 실제로 프로세스가 시작될 때 프로세스에 전달되는 문자열입니다. 프로세스가 실행 중일 때 원하는대로 수행하고, 사용하고, 무시하고, 덮어 씁니다. 물론 다른 프로세스를 시작할 때 또 다른 일이 될 수 있지만 물론 모든 환경 변수를 다시 전달하는 것이 일반적입니다.)
POSIX 이외의 쉘 (예 :)을 사용하는 경우 csh
상황이 다를 수 있습니다.
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
이것들은 하나의 동일한 변수입니다. 대부분의 다른 프로그래밍 언어와 달리 셸에서 환경 변수와 셸 변수는 동일한 네임 스페이스를 공유합니다. 셸에서 환경 변수는로 내 보낸 셸 변수입니다 export
.
예를 들어, 이전 질문에 대한 나의 답변 " 쉘 변수와 환경 변수의 사용법에 어떤 차이가 있습니까? "
셸 변수는 현재 셸에만 사용할 수 있으며 시스템 전체에서는 사용할 수 없습니다. 다른 한편으로 환경 변수는 시스템 전체에서 사용될 수 있습니다. 일반적으로 쉘 변수는 소문자로 작성되고 환경 변수는 대문자로 작성됩니다. 쉘 변수를 환경 변수로 작동하게 만들 수 있습니다. 내보내기 만하면됩니다.