Learning Bash Book은 서브 쉘이 환경 변수 및 파일 디스크립터 등 만 상속하고 내 보내지 않은 변수는 상속하지 않는다고 언급합니다.
$ var=15
$ (echo $var)
15
$ ./file # this file include the same command echo $var
$
아시다시피 셸은 for ()
및 for에 대해 두 개의 하위 셸을 만들지 ./file
만, 왜 하위 셸 ()
에서 var
변수를 내 보내지 ./file
않았지만 식별하지 않은 경우 에도 변수를 식별합니까?
# Strace for ()
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25617
# Strace for ./file
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25631
내가 사용하려고 strace
의 갈래 과정 모두 있음이 수단, 그래서 이런 방법을 알아 내기 위해 놀라 울 정도로 그 bash는 복제 시스템 호출에 동일한 인수를 사용 발견 ()
하고 ./file
왜, 부모의 같은 프로세스 주소 공간이 있어야합니다 이 ()
경우 변수가 서브 쉘에 표시되고 ./file
동일한 인수가 복제 시스템 호출을 기반으로하지만이 경우 에는 동일하지 않습니다 .