익스포트 된 쉘 변수와 bash에없는 쉘 변수의 차이점


41

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그렇지 않다는 것을 안다 .

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


17
용어 참고 : "환경 변수"는 항상 내보내집니다. 내 보내지 않은 변수는“쉘 변수”(또는“매개 변수”)입니다.
Gilles 'SO- 악마 그만'

답변:


44

반출 된 변수는 반출 한 쉘이 실행 한 명령 환경으로 반출되고 반출되지 않은 변수는 현재 쉘 호출에 로컬입니다. 로부터 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
$$

따라서 현재 쉘에만 관심이 있다면 내 보내야합니까? 별도로, locale현재 쉘에 대한 업데이트가 표시되지 않는 이유는 무엇입니까?
Pacerier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.