it-swarm-ko.tech

내보내는 셸 변수와 bash에없는 변수의 차이점

Bash는 내 보낸 변수와 그렇지 않은 변수를 구별하는 것으로 보입니다.

예:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

set에는 변수가 표시되지만 env에는 표시되지 않습니다.

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

set에는 두 변수가 모두 표시되지만 env에는 내 보낸 변수 만 표시됩니다.

set은 bash 내장이고 env는 그렇지 않습니다.

내보내는 변수와 그렇지 않은 변수의 차이점은 무엇입니까?

46
lesmana

익스포트 된 변수는 익스포트 된 쉘이 실행 한 명령 환경으로 내보내지고 익스포트되지 않은 변수는 현재 쉘 호출에 로컬입니다. export 매뉴얼 페이지에서 :

셸은 지정된 이름에 해당하는 변수에 내보내기 속성을 제공해야하며, 이로 인해 이후에 실행되는 명령의 환경에있게됩니다.

set는 내 보내지 않은 로컬 변수를 포함하여 현재 환경을 출력합니다. env는 새 환경에서 프로그램을 시작하는 데 사용되며 인수없이 해당 새 환경을 출력합니다. env는 새 환경을 만들고 있으므로 해당 셸에서 시작된 모든 프로그램의 경우와 같이 내 보낸 변수 만 가져옵니다. 예를 들어, 첫 번째 쉘 내에 두 번째 쉘을 생성합니다 (내 쉘에서 프롬프트를 표시하기 위해 $$를 사용했습니다).

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

값뿐만 아니라 내 보낸 변수입니다. 즉, 일단 export FOO, FOO은 전역 변수가되고 나중에 변경하더라도 후속 환경에서 나타납니다.

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$
45
Michael Mrozek