상속된 환경 변수는 환경 변수로 상속됩니까, 아니면 쉘 변수로 상속됩니까?

상속된 환경 변수는 환경 변수로 상속됩니까, 아니면 쉘 변수로 상속됩니까?

내 bash 쉘에 다음과 같은 환경 변수가 있다고 가정해 보겠습니다.

export a="Hello World"

bash 쉘에서 프로세스를 실행하면 a하위 프로세스가 환경 변수를 상속받습니다.

내 질문은 다음과 같습니다. a하위 프로세스에서 환경 변수 또는 쉘 변수로 상속됩니까? 즉, a하위 프로세스에서 내보낼 것입니까?

답변1

환경 변수로.

이는 하위 프로세스에 의해 시작된 모든 하위 프로세스도 이 변수를 상속한다는 의미입니다.

시험:

$ export FOO=bar
$ sh
$ sh
$ sh
$ echo "$FOO"
bar
$ exit
$ exit
$ exit

위에서 환경 변수를 생성하는 셸은 FOO새로운 대화형 셸을 시작합니다. 그것은 또 다른 일을 시작했고, 또 다른 일을 시작했습니다. 이 증손자의 껍질에는 $FOO가치가 있습니다 bar.

또 다른 테스트에서는 하위 쉘이 환경 변수를 변경하면 변경 사항이 후속 하위 쉘로 전달되지만 상위 쉘로는 전달되지 않는 것으로 나타났습니다.

$ export FOO=bar
$ ( ( echo "$FOO"; FOO=quux; ( ( ( echo "$FOO" ) ) ) ) )
bar
quux
$ echo "$FOO"
bar

FOO(이 예에서는 서브쉘도 쉘 변수를 상속하므로 내보내기는 중요하지 않습니다. 그러나 각각이 완전히 별도의 프로세스인 경우 ( ... )효과는 동일합니다.)( ... )

환경 변수는 다음에 대해 사용할 수 있습니다.어느프로세스는 쉘 스크립트가 아닌 쉘에서 시작됩니다. C 프로그램이나 스크립트가 이를 쉘 변수로 상속하는 것은 의미가 없습니다. awk이러한 언어에는 그러한 변수에 대한 개념이 없기 때문입니다(환경 변수는 엄격하게 키-값 쌍이지만 쉘 변수는 정수로 입력할 수 있습니다). , 읽기 전용, 배열, 연관 배열 등(셸의 기능에 따라 다름).

답변2

/proc/PID/environ에서 프로세스 환경 변수를 읽을 수 있습니다. 따라서 변수를 내보낼 때 이 /proc "파일"에 선언됩니다.

관련 정보