환경 변수

**환경 변수**(環境 變數, environment variable)는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. 환경 변수는 실행 중인 프로세스가 컴퓨터에서 작동하는 방식에 영향을 줄 수 있는 사용자 정의 값이다. 환경 변수는 프로세스가 실행되는 환경의 일부이다. 예를 들어, 실행 중인 프로세스는 TEMP 환경 변수의 값을 쿼리하여 임시 파일을 저장할 적절한 위치를 찾거나, HOME 또는 USERPROFILE 변수를 쿼리하여 프로세스를 실행하는 사용자가 소유한 디렉터리 구조를 찾을 수 있다. 이는 1979년 버전 7 유닉스와 함께 현대적인 형태로 도입되었으므로 리눅스 및 macOS를 포함하여 그 이후의 모든 Unix 운영 체제 버전 및 변형에 포함된다. 1982년 PC DOS 2.0부터 마이크로소프트 윈도우 및 OS/2를 포함한 모든 후속 마이크로소프트 운영 체제에도 구문, 사용법 및 표준 변수 이름이 다소 다르지만 이를 기능으로 포함했다.
# 환경 변수 보기/설정
변수들은 명령 줄 위에서, .BAT 확장자를 가지는 일괄 처리 파일, 또는 스크립트 안에서 쓰일 수 있다. 변수 이름 주변이나 앞에 있는 특별한 기호를 놓아서 참조하는 것이 보통이다. 예를 들어, 도스 또는 윈도 시스템에서 "프로그램을 찾는 기본 경로"를 보여 주려면, 이 명령어를 사용하면 된다: echo %PATH% 다른 스크립트와 셸 환경에서는 가끔 위와 같은 목적에서라도 다른 기호를 사용한다. 많은 유닉스 셸에서는 흔히 달러 사인이 쓰인다: echo $PATH
## 도스
도스와 윈도우에서 **SET** 명령어를 변수 없이 사용하면 모든 환경 변수와 그에 따른 모든 값을 보여 준다. 도스-윈도의 특정한 값에 변수를 설정하려면 다음과 같이 사용하면 된다: SET *변수*=*값* "SET *변수*="라고만 입력하면, 해당 변수 자체가 지워진다.
## 유닉스
**env**, **set**, 그리고 **printenv** 명령어들은 변수 없이 사용하면 모든 환경 변수와 그에 따른 모든 값을 보여 준다. env와 set은 또한 환경 변수를 설정하는 데 쓰일 수도 있으며 자주 셸에 직접 통합되기도 한다. printenv는 변수 이름을 명령어에 단일 변수로 주면 하나의 단일 변수를 인쇄하는 데 쓰일 수 있다. 유닉스에서 다음의 명령어들을 사용할 수 있지만 어떠한 셸에서는 자주 의존적으로 쓰인다. export *변수*=*값* # Bourne, bash, 그리고 다른 셸에서 쓰임 setenv *변수* *값* # csh과 관련된 셸에서 쓰임
## 예측 불허의 환경 변수
유닉스에서, 변수들은 **export** 키워드 없이 할당되기도 한다. 이러한 방법으로 변수를 정의하면 **set** 명령어를 통해 보이기는 하지만 자식 프로세스에 종속되지는 않는다. 도스와 윈도 환경에서는 이것을 사용할 수 없다. *변수*=*값*
# 예시
* `PATH`: 디렉터리 경로의 목록. 사용자가 전체 경로를 지정하지 않고 명령을 입력하면 이 목록을 확인하여 해당 명령어가 경로에 속하는지를 살펴본다. * `HOME` (유닉스 계열) 및 `USERPROFILE` (마이크로소프트 윈도우): 사용자의 홈 디렉터리가 파일 시스템의 어디에 위치해있는지를 지시한다. * `HOME/{.AppName}` (유닉스 계열) 및 `APPDATA\{DeveloperName\AppName}` (마이크로소프트 윈도우): 애플리케이션 설정 저장을 위해 사용한다. 윈도우의 경우 수많은 애플리케이션들이 애플리케이션 설정에 `USERPROFILE`을 잘못 사용한다: `USERPROFILE`은 `Documents/Pictures/Downloads/Music`와 같은 경로를 사용자가 선택할 수 있게 허용하는 대화 상자에만 사용해야 한다. 프로그래밍 목적의 경우 `APPDATA` (여러 장치 간 공유되는 애플리케이션 설정 조회용), `LOCALAPPDATA` (로컬 애플리케이션 설정용) 또는 `PROGRAMDATA` (여러 OS 사용자 간 공유되는 애플리케이션 설정용)을 사용해야 한다.archive-date=2017-12-18 * `TERM` (유닉스 계열): 사용되는 컴퓨터 터미널이나 터미널 에뮬레이터의 유형을 지정한다. (예: `vt100` 또는 `dumb`). * `PS1` (유닉스 계열): 본 셸 및 변종에서 프롬프트가 어떻게 표시될지를 지정한다. * `MAIL` (유닉스 계열): 사용자의 메일을 발견할 위치를 지정하는데 사용된다. * `TEMP`: 프로세스가 임시 파일을 저장할 수 있는 위치이다.
# UNIX-ENV유닉스
;`$PATH`: 콜론으로 구분된 디렉터리 목록을 포함하며 셸은 이름에 슬래시가 포함되지 않는 명령을 검색한다. 도스, OS/2, 마이크로소프트 윈도우의 `%PATH%` 변수와 동일하다. ;$HOME`$HOME`: 사용자의 홈 디렉터리의 위치를 포함한다. `getpwuid`, `getuid`와 같은 C 함수를 통해 현재 사용자의 홈 디렉터리를 찾아낼 수 있으나 다양한 셸 스크립트(및 다른 컨텍스트)에서 편의를 위해 `$HOME`이 자주 사용된다. ;$PWD`$PWD`: 현재 디렉터리의 변수 지점. pwd 명령어를 변수 없이 호출할 때의 출력과 동일하다. ;$DISPLAY`$DISPLAY`: X1 프로그램이 기본적으로 사용할 디스플레이 식별자를 포함한다. ;$LD_LIBRARY_PATH`$LD_LIBRARY_PATH`: 동적 링커가 있는 수많은 유닉스 시스템에서 다른 모든 디렉터리를 찾기 전에 `exec` 이후 프로세스 이미지를 빌드할 때 동적 링커가 공유 오브젝트를 검색할 대상인 콜론 구분 디렉터리 목록을 포함한다. ;$LC_DATE`$LANG, $LC_ALL, $LC_...`: `$LANG`은 기본 로케일을 설정하기 위해 사용된다. 이를테면 로케일 값이 `pt_BR`이라면 언어는 (브라질) 포르투갈어로 설정된다. 각기 다른 지역화 관점은 개개의 `$LC_`\- 변수(`$LC_CTYPE`, `$LC_COLLATE`, `$LC_DATE` 등)들에 의해 제어된다. `$LC_ALL`을 사용하면 모든 관점에 동일한 로케일을 강제하는데 사용할 수 있다. ;$TZ`$TZ`: 시간대를 참조한다. 시간대 자체를 지정하거나 파일을 참조(`/usr/share/zoneinfo`에서)시킴으로써 여러 형식으로 사용이 가능하다.
# 마이크로소프트 윈도우 XP, 비스타의 기본 환경 변수와 값
{| class="wikitable" ! 변수 ! 자료값 |- | %ALLUSERSPROFILE% | (윈도우 XP) C:\Documents and Settings\All Users (윈도우 비스타) C:\ProgramData |- | %APPDATA% | (윈도우 XP) C:\Documents and Settings\\{사용자 이름}\Application Data (윈도우 비스타) C:\Users\\{사용자 이름}\AppData\Roaming |- | %COMPUTERNAME% | {컴퓨터 이름} |- | %COMSPEC% | C:\Windows\System32\cmd.exe |- | %HOMEDRIVE% | C: |- | %HOMEPATH% | (윈도우 XP) \Documents and Settings\\{사용자 이름} (윈도우 비스타) \Users\\{사용자 이름} |- | %PATH% | C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem |- | %PATHEXT% | (윈도우 XP) .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF: .WSH (윈도우 비스타) .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC |- | %PROGRAMFILES% | C:\Program Files |- | %PROMPT% | 현재 명령 프롬프트 포맷에 대한 코드. 보통 이 코드는 $P$G로 되어 있다. |- | %SYSTEMDRIVE% | 윈도우 XP 루트 디렉터리를 포함하고 있는 드라이브. 보통 C: |- | %SYSTEMROOT% | 윈도 디렉터리. 보통 C:\Windows로 되어 있으며, 공식적으로는 C:\WINNT이다. |- | %TEMP% 및 %TMP% |(윈도우 XP) C:\Documents and Settings\\{사용자 이름}\Local Settings\Temp (윈도우 비스타) C:\Users\\{사용자 이름}\AppData\Local\Temp |- | %USERNAME% | {사용자 이름} |- | %USERPROFILE% | (윈도 NT 4, 2000) C:\windows\Profile (윈도우 XP) C:\Documents and Settings\\{사용자 이름}
(윈도우 비스타) C:\Users\\{사용자 이름} |- | %WINDIR% | C:\Windows |}