
답변1
SystemRoot
의사/사전 정의된 환경 변수이기 때문에 예상대로 확장됩니다. WinDir
일반 환경 변수이며 PATH
초기화 시퀀스와 같이 다른 변수와 "경쟁"합니다.
Raymond Chen이 가장 잘 설명했습니다.Windows Confidential: 숨겨진 변수: "하나의 환경 변수를 다른 환경 변수에 포함시키는 것은 단순히 좋은 운영 타이밍의 문제입니다.". 더 인용하면:
환경 구축 프로세스의 작동 방식은 다음과 같습니다. 대략 4단계로 진행됩니다.
- 먼저 시스템은 SystemRoot 및 ALLUSERSPROFILE(COMPUTERNAME 또는 ProgramFiles 제외)과 같은 사전 정의된 시스템 전체 환경 변수를 생성합니다.
- 둘째, 환경 변수 대화 상자의 시스템 섹션에서 환경 변수를 생성합니다. 시스템 환경 변수 정의에서는 "%" 표기법을 사용하여 이전 단계에서 생성된 사전 정의된 환경 변수를 참조할 수 있습니다. 예를 들어 시스템 환경 변수를 %SystemDrive%\Extras로 설정할 수 있습니다. 시스템 환경이 완성되면 Windows는 사용자 환경 구축을 시작합니다.
- 3단계는 USERPROFILE 및 APPDATA와 같은 사전 정의된 사용자별 환경 변수를 생성하는 것입니다. COMPUTERNAME 및 ProgramFiles 관련 변수도 여기에 생성됩니다. 비록 기술적으로는 사용자별 변수가 아니라 시스템 변수이지만 말입니다.
- 마지막으로 시스템은 환경 변수를 생성합니다. 이는 환경 변수 대화 상자의 사용자 섹션에 있으며 처음 세 단계에서 생성된 모든 변수에 액세스할 수 있으므로 사용자 환경 변수를 %USERPROFILE%\Extras로 설정하거나 두 번째 단계에서 설정된 사용자 정의 시스템 환경 변수를 설정할 수 있습니다. . 사용자 환경 변수의 이름이 시스템 환경 변수와 동일한 경우 새 값이 이전 값을 대체합니다.
...
한 고객은 시스템 PATH 환경 변수를 %APPDATA%;C:\Windows로 설정하는 데 어려움을 겪고 있었습니다. 그들은 최종 환경에 APPDATA 환경 변수의 값으로 바꾸는 대신 지정된 리터럴 경로(퍼센트 기호 및 모두)만 포함되어 있음을 발견했습니다. 이전에 자세히 설명한 일련의 작업을 살펴보면 왜 이런 일이 발생했는지 분명합니다. 그들은 아직 정의되지 않은 변수를 기반으로 시스템 환경 변수를 설정하려고 했습니다.
해결책은 간단했습니다. PATH 편집을 시스템 환경 목록 상자에서 사용자 환경 목록 상자로 옮기는 것입니다. 이렇게 하면 %APPDATA% 환경 변수를 사용하려고 할 때 해당 변수가 거기에 있게 됩니다.
다른 환경 변수를 기반으로 환경 변수를 정의할 때 가능한 "경합 조건"의 간단한 예를 보려면 다음과 같이 두 개의 시스템 변수를 정의하는 순환 사례를 고려하십시오.
bbb=%ccc%
ccc=%bbb%
내 Windows 7에서는 변수가 다음과 같이 평가됩니다.
C:\etc>set
...
bbb=%ccc%
ccc=%ccc%