쉘 변수
쉘 변수는 범위가 현재 쉘 세션 (예 : 대화식 쉘 세션 또는 스크립트)에있는 변수입니다.
사용하지 않는 이름에 값을 지정하여 쉘 변수를 작성할 수 있습니다.
var="hello"
쉘 변수의 사용은 현재 세션에서 데이터를 추적하는 것입니다. 쉘 변수는 일반적으로 소문자로 된 이름을 갖습니다.
환경 변수
환경 변수는 내 보낸 쉘 변수입니다. 이는 변수를 작성한 쉘 세션뿐만 아니라 해당 세션에서 시작된 프로세스 (쉘뿐만 아니라)에서도 변수로 표시됨을 의미합니다.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
또는
export VAR="hello"
쉘 변수를 내 보낸 후에는 설정이 해제 될 때까지 또는 "내보내기 속성"이 제거 될 때까지 ( export -n
에서로 bash
) 내보내기 상태를 유지 하므로 일반적으로 다시 내보낼 필요가 없습니다. 변수를 설정하면 변수가 unset
삭제됩니다 (환경 변수인지 여부에 상관없이)
bash
환경 변수가되도록 배열 및 연관 해시 및 기타 셸을 내보낼 수 없습니다. 환경 변수는 값이 문자열 인 단순 변수 여야하며 종종 대문자로 구성된 이름을 갖습니다.
환경 변수를 사용하면 현재 셸 세션에서 데이터를 추적하고 시작된 프로세스가 해당 데이터에 참여할 수 있습니다. 일반적인 경우는 PATH
환경 변수로, 셸에서 설정 한 후 나중에 전체 경로를 지정하지 않고 프로그램을 시작하려는 모든 프로그램에서 사용할 수 있습니다.
프로세스에서 환경 변수의 수집을 종종 "프로세스 환경"이라고합니다. 각 프로세스에는 고유 한 환경이 있습니다.
환경 변수는 "전달"될 수 있습니다. 즉, 하위 프로세스는 상위 프로세스에서 환경 변수를 변경할 수 없으며 , 하위 프로세스를 시작할 때 환경을 설정하는 것 외에는 상위 프로세스가 기존 프로세스의 환경을 변경하지 않을 수 있습니다 자식 프로세스.
환경 변수는 env
(인수없이) 함께 나열 될 수 있습니다 . 그 외에는 셸 세션에서 내 보내지 않은 셸 변수와 동일하게 나타납니다. 대부분의 다른 프로그래밍 언어는 일반적으로 "일반"변수를 환경 변수와 혼합하지 않기 때문에 쉘에 약간 특별합니다 (아래 참조).
env
현재 세션에서 설정하지 않고 프로세스 환경에서 하나 이상의 환경 변수 값을 설정하는 데 사용될 수도 있습니다.
env CC=clang CXX=clang++ make
이는 make
환경 변수 CC
가 값 clang
으로 CXX
설정 되고로 설정되는 것으로 시작 clang++
합니다.
프로세스 환경 을 정리 하는 데 사용될 수도 있습니다 .
env -i bash
이 시작 bash
하지만 새로운 현재 환경을 전송하지 않습니다 bash
(여전히 것이다 과정 이 그것의 쉘 초기화 스크립트에서 새로 생성으로 환경 변수).
차이의 예
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
다른 언어
대부분의 프로그래밍 언어에는 환경 변수를 가져오고 설정할 수있는 라이브러리 함수가 있습니다. 환경 변수는 간단한 키-값 관계로 저장되므로 일반적으로 언어의 "변수"가 아닙니다. 프로그램은 키 (환경 변수의 이름)에 해당하는 값 (항상 문자열 임)을 가져올 수 있지만이 값을 정수 또는 언어가 예상하는 데이터 유형으로 변환해야합니다.
C에서, 환경 변수를 사용하여 액세스 될 수있다 getenv()
, setenv()
, putenv()
및 unsetenv()
. 이 루틴으로 작성된 변수는 C 프로그램이 시작하는 프로세스와 동일한 방식으로 상속됩니다.
다른 언어는 %ENV
Perl 의 해시 또는의 ENVIRON
대부분의 구현에서 연관 배열 과 같이 동일한 작업을 수행하기위한 특수 데이터 구조를 가질 수 있습니다 awk
.