환경 변수와 쉘 변수의 차이점

환경 변수와 쉘 변수의 차이점

환경 변수는 자식 프로세스에서 상속되지만 쉘 변수는 상속되지 않는다고 합니다. 그러나 다음 테스트에서는 쉘 변수가 환경 변수와 마찬가지로 하위 프로세스에 표시된다는 것을 보여줍니다. 차이점은 무엇입니까?

> bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
> export TEST="ENV_TEST"    #env var
> sh -c "echo \$TEST"
ENV_TEST
> TEST="SHELL_TEST"         #shell var
> sh -c "echo \$TEST"       #shell var is seen in child process
SHELL_TEST

답변1

두 번째 할당에서는 TEST="SHELL_TEST"변수 내보내기가 취소되지 않습니다. 여전히 "자손에 의해 상속됨"으로 표시됩니다. 그리고 자식 프로세스가 상속하는 값은 현재 부모 프로세스에 설정된 값입니다.
즉, 두 번째 할당은 TEST쉘 변수의 상태를 복원하지 않으며 해당 용어로는 여전히 환경 변수입니다.

하위 프로세스에서 설정을 해제하려면 내보내기를 취소해야 합니다.

$ typeset +x TEST
$ sh -c 'echo $TEST'

$

관련 정보