환경 변수와 셸 변수의 차이점은 무엇입니까?


답변:


35

$BASHA는 로컬 변수 는 현재 (떠들썩한 파티)의 유효 단 쉘.

같은 환경 변수$SHELL 는 시스템 전체에서 유효합니다. 현재 Bash 쉘에서 bash$BASH 의 실행 경로를 가리키는 반면, 기본값으로 정의 된 쉘 (같은 값일 수 있음)을 가리 킵니다.$SHELL

환경 변수에 대한 설명을 참조 환경 변수 우분투 도움말을.


1
위대한 연결 (+1) :)
Peter.O

12
이 답변은 정확하지 않거나 정확하지 않습니다. 환경 변수는 전역 / 시스템 전체가 아닙니다. 쉘 변수는 개인 받는 현재 실행중인 쉘, 그들은 어떤 자식 프로세스 (전달) 내보낼 수 없습니다. 환경 변수는 모든 하위 프로세스로 내보내집니다. "MYVAR = private; export OURVAR = shared; printenv"는 쉘이 printenv 명령을 실행할 때 MYVAR이 아닌 OURVAR을 내보내므로 "OURVAR"만보고합니다.
CM

2
CM의 댓글에 +1! 나는 그렇게 간단하고 정확하게 설명 된 차이점을 들어 본 적이 없습니다 !!! 이 의견이 답이되어야합니다.
바람 방랑자 제시

48

환경 변수는 프로그램 및 하위 프로그램에서 전 세계적으로 사용 가능합니다. 쉘 변수는 현재 쉘에서만 사용 가능합니다. 쉘 변수를 환경 변수로 사용 가능하게하려면 export VARNAME(dollar없이 $)를 사용하십시오.

설명의 예 :

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

환경 변수를 정의하는 다른 방법 :

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE

나는 이것이 옳지 않다고 생각합니다. export반드시 환경 변수를 설정하지 않아도됩니다. stackoverflow.com/questions/7411455/…
Chris Stryczynski

3
@ChrisStryczynski export는 자식 프로세스에 대한 환경 변수를 설정합니다. 링크 된 게시물이이 답변과 모순되지 않습니다. 왜 그것이 잘못되었다고 생각하는지 분명히 알 수 있습니까?
Lekensteyn

export절대적으로 환경 변수를 설정
David Tonhofer

8

차이가 있습니다. 쉘 변수와 환경 변수 는 내가 할 수있는 것을 더 잘 설명하지만 여기에 발췌 한 내용이 있습니다.

쉘 변수가 변경되면 분기 된 하위 프로세스가 변경 사항을 볼 수 있도록 해당 환경 변수로 명시 적으로 "내 보내야"합니다. 쉘 변수는 그들이 정의 된 쉘에 국한되어 있음을 상기하십시오.


난 내 자신의 대답을 주석하고있어 .. 내가 정말 좋아 도움말 우분투 Takkat의 대답에 링크 (그것은 나보다 낫다)
Peter.O

3
또한 링크가 더 이상 작동하지 않습니다!

1

셸 변수 : 단기, 셸의 현재 인스턴스에만 적용, 시스템 전체에 해당하지 않음

환경 변수 : 장기 사용, 유효한 시스템 전체, 전 세계적으로 허용

일반적으로 쉘 변수는 이름이 소문자 인 반면 Envn입니다. 변수는 대문자로 작성


-1

이 질문에 대답하려면 먼저 변수의 범위를 이해하십시오.

에있는 것처럼 새 변수를 만들면 사용자가 로그인 한 셸 인스턴스SOME_ENV_VARIABLE="testing.txt" 에서 해당 변수에 SHELL scope액세스 할 수 있습니다 . 예를 들어 인스턴스가 변경되면 새 터미널을 열거 나 셸을 변경합니다 (예 : )로 전환하면 해당 변수에 액세스 할 수 없습니다.csh

당신은 같은 그 변수 내보낼 때 export SOME_ENV_VARIABLE그 변수에 의미, 지금은 환경 범위에서 사용할 수 있습니다 인스턴스 당신은 당신이 할 수있는 쉘 변경하면 여전히 그 변수에 액세스합니다. 다음 예제를 통해 이해하려고합니다.

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

비유 : 침실이 2 개인 아파트가 있고 다른 룸메이트와 공유한다고 가정 해 봅시다. 공통 영역은 침실이 아닌 다른 사람이 액세스 할 수 있으며 환경 변수는 공통 영역과 같고 쉘 변수는 침실과 같습니다. 공용 영역에 무언가가 있으면 누군가가 액세스 할 수 있지만 침실에 보관하면 당신이 액세스 할 수 있습니다.

새 터미널을 열면 해당 인스턴스를 변경하기 때문에 변수 중 하나에 액세스 할 수 없습니다 . 이를 위해 .profile또는 .bashrc(bash를 사용하는 경우)에 변수를 추가해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.