답변:
$BASH
A는 로컬 변수 는 현재 (떠들썩한 파티)의 유효 단 쉘.
같은 환경 변수$SHELL
는 시스템 전체에서 유효합니다. 현재 Bash 쉘에서 bash$BASH
의 실행 경로를 가리키는 반면, 기본값으로 정의 된 쉘 (같은 값일 수 있음)을 가리 킵니다.$SHELL
환경 변수에 대한 설명을 참조 환경 변수 우분투 도움말을.
환경 변수는 프로그램 및 하위 프로그램에서 전 세계적으로 사용 가능합니다. 쉘 변수는 현재 쉘에서만 사용 가능합니다. 쉘 변수를 환경 변수로 사용 가능하게하려면 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/…
export
는 자식 프로세스에 대한 환경 변수를 설정합니다. 링크 된 게시물이이 답변과 모순되지 않습니다. 왜 그것이 잘못되었다고 생각하는지 분명히 알 수 있습니까?
export
절대적으로 환경 변수를 설정
차이가 있습니다. 쉘 변수와 환경 변수 는 내가 할 수있는 것을 더 잘 설명하지만 여기에 발췌 한 내용이 있습니다.
쉘 변수가 변경되면 분기 된 하위 프로세스가 변경 사항을 볼 수 있도록 해당 환경 변수로 명시 적으로 "내 보내야"합니다. 쉘 변수는 그들이 정의 된 쉘에 국한되어 있음을 상기하십시오.
이 질문에 대답하려면 먼저 변수의 범위를 이해하십시오.
에있는 것처럼 새 변수를 만들면 사용자가 로그인 한 셸 인스턴스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를 사용하는 경우)에 변수를 추가해야합니다 .