লার্নিং ব্যাশ বুক উল্লেখ করেছে যে একটি সাবশেল কেবল পরিবেশের ভেরিয়েবল এবং ফাইল বর্ণনাকারী ইত্যাদির উত্তরাধিকারী হবে এবং এটি রফতানি না হওয়া ভেরিয়েবলের উত্তরাধিকারী হবে না:
$ var=15
$ (echo $var)
15
$ ./file # this file include the same command echo $var
$
আমি জানি যে শেলটি তার জন্য ()এবং এর জন্য দুটি সাবস্কেল তৈরি করবে ./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করে উভয় forked প্রক্রিয়া জিনিসটা কিভাবে এই ঘটে আশ্চর্যজনক আমি দেখেছি যে ব্যাশ ক্লোন সিস্টেম কল জন্য একই আর্গুমেন্ট ব্যবহার করবে, তাই এই উপায়ে ()এবং ./fileপিতা বা মাতা একই প্রক্রিয়া অ্যাড্রেস স্পেস থাকতে হবে, তবে কেন মধ্যে ()কেস subshell কাছে দৃশ্যমান varible এবং একই জন্য ঘটবে না ./fileযদিও একই আর্গুমেন্ট ক্লোন সিস্টেম কল উপর ভিত্তি করে তৈরি, কেস?