$ unset foo
$ unset bar
$ echo $foo
$ echo $bar
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ foo=a
$ bar=b
$ export bar
$ echo $foo
a
$ echo $bar
b
$ PATH=
$ echo $PATH
$ /bin/bash
bash: lesspipe: No such file or directory
bash: dircolors: No such file or directory
bash: ls: No such file or directory
$ echo $foo
$ echo $bar
b
$ echo $PATH
$
보시다시피 변경 사항은 $PATH
서브셸에 영향을 미치며 export
다른 변수를 편집해야 합니다. 왜?
답변1
실제로 두 가지 유형의 변수가 있습니다.
- 환경 변수
- 쉘 변수
상황을 더 복잡하게 만들기 위해 둘은 동일하게 보이며 명령을 사용하여 셸 변수를 환경 변수로 변환할 수 있습니다 export
.
이 env
명령은 현재 환경 변수 세트를 표시합니다.
$ myvar=100
$ env | grep myvar
$ export myvar
$ env | grep myvar
myvar=100
명령 수명 동안 변수를 일시적으로 내보낼 수도 있습니다.
$ env | grep anothervar
$ anothervar=100 env | grep anothervar
anothervar=100
$ env | grep anothervar
$
쉘이 시작되면 여러 환경 변수(0일 수 있음)를 상속받습니다.
시작 스크립트(예: .bash_profile
디렉터리 .bashrc
의 파일 /etc
)도 변수를 설정하고 내보낼 수 있습니다.
마지막으로 환경이 비어 있으면 쉘 자체가 환경 변수에 대한 기본값을 설정할 수 있습니다. 예를 들어
$ PATH=foo /bin/bash -c 'echo $PATH'
foo
$ PATH= /bin/bash -c 'echo $PATH'
$ unset PATH
$ /bin/bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
답변2
이 글을 읽어보시길 권합니다기사.
쉘 변수와 환경 변수 사이에는 큰 차이가 있습니다.길환경적 요인 중 하나이며,이미 내보냈습니다.(기본적으로) 따라서 이를 변경하면 사용 중인 현재 셸과 다른 모든 셸(모든 하위 셸 또는 프로세스)이 영향을 받습니다.
길명령을 찾을 때 시스템이 확인할 디렉터리 목록입니다. 따라서 변경하거나 추가하려는 경우에도 PATH="$PATH:...
명령을 실행하기 위한 원래 경로가 필요하므로 사용하는 것이 좋지만 완전히 변경하는 경우 절대 경로를 입력하여 명령을 사용해야 합니다. 예를 들어 /bin/pwd
.
하지만부자내보낸 내용은 셸이나 프로세스에 영향을 미치지 않습니다. 환경 변수로 만들려고 하지만 유효한 항목을 정의하지 않았기 때문에 셸이나 프로세스에 어떤 영향을 미치는지 알 수 없습니다. , 실제로 이것은 일부 임시 데이터를 추적하기 위해 자신의 필요에 따라 정의한 것이므로 이를 쉘 변수로 유지하는 것이 좋습니다. 예를 들어, 수학 프로젝트를 하려고 할 때 몇 가지를 정의하고 짧은 시간 안에 사용해야 할 수 있으므로 내보내지 않고 일부 쉘 변수만 설정하면 됩니다.
제 말이 정확하길 바라지만, 그래도 주어진 기사를 읽고 완전히 이해할 수 있도록 일부 변수를 변경해 보시기를 권장합니다. 그런데 환경 변수를 영구적으로 유지하려면 해당 변수를 .bashrc
또는 .bash_profile
.