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
그렇지 않다는 것을 안다 .
내보내는 변수와 그렇지 않은 변수의 차이점은 무엇입니까?
답변
반출 된 변수는 반출 한 쉘이 실행 한 명령 환경으로 반출되고 반출되지 않은 변수는 현재 쉘 호출에 로컬입니다. 로부터 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
$$