Bash에서 내보낸 쉘 변수와 내보내지 않은 쉘 변수의 차이점

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내보낸 변수만 표시됩니다.

나는 이것이 setbash 내장이라는 것을 알고 있지만 env그렇지 않습니다.

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

답변1

내보낸 변수는 이를 내보내는 쉘의 명령 환경으로 가져오는 반면, 내보내지 않은 변수는 현재 쉘 호출에 로컬입니다. 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
$$

관련 정보