Learning Bash Book, bir alt kabuğun yalnızca ortam değişkenlerini ve dosya tanımlayıcılarını vb. Devralacağını ve dışa aktarılmayan değişkenleri devralmayacağını belirtir:
$ var=15
$ (echo $var)
15
$ ./file # this file include the same command echo $var
$
Bildiğim gibi, kabuk için ()ve için iki alt kabuk oluşturacak ./file, ancak bu ()durumda neden alt kabuk, vardışa aktarılmasa da değişkeni tanımlıyor ve ./filedurumda tanımlamıyor?
# 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
Ben kullanmaya çalıştı stracede çatallı süreç hem bu yollarla yani bu durumda anlamaya ve şaşırtıcı bunu bash klon sistemi arama için aynı argümanları kullanır bulundu ()ve ./fileböylece neden ebeveynin aynı işlem adres alanı olmalıdır içinde ()söz varible alt kabuğa görülebilir ve aynı için olmaz ./fileaynı argümanlar klon sistemi çağrısı dayanmaktadır rağmen, dava?