आमतौर पर, $0एक स्क्रिप्ट में स्क्रिप्ट के नाम पर सेट किया जाता है, या इसे (पथ सहित) के रूप में जो भी लागू किया गया था। हालाँकि, यदि मैं विकल्प के bashसाथ प्रयोग करता हूं, तो कमांड स्ट्रिंग के बाद दिए गए तर्कों में से पहले पर सेट है:-c$0
bash -c 'echo $0 ' foo bar
# foo
वास्तव में, ऐसा लगता है कि स्थितिगत मापदंडों को स्थानांतरित कर दिया गया है, लेकिन सहित $0। हालांकि shiftकमांड स्ट्रिंग प्रभावित नहीं करता है $0(सामान्य रूप में):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
कमांड स्ट्रिंग्स के लिए यह स्पष्ट रूप से अजीब व्यवहार क्यों है? ध्यान दें कि मैं इस अजीब व्यवहार को लागू करने के पीछे कारण, औचित्य की तलाश कर रहा हूं।
कोई अनुमान लगा सकता है कि इस तरह के कमांड स्ट्रिंग $0को आमतौर पर परिभाषित पैरामीटर की आवश्यकता नहीं होगी , इसलिए अर्थव्यवस्था के लिए इसका उपयोग सामान्य तर्कों के लिए भी किया जाता है। हालाँकि, उस स्थिति में व्यवहार shiftविषम है। एक अन्य संभावना यह है कि $0कार्यक्रमों के व्यवहार को परिभाषित करने के लिए उपयोग किया जाता है ( जैसा कि एक ला bashकहा जाता है shया जैसा vimकहा जाता है vi), लेकिन ऐसा नहीं हो सकता है, क्योंकि $0यहां केवल कमांड स्ट्रिंग में देखा जाता है और इसके भीतर बुलाए गए कार्यक्रमों द्वारा नहीं। मैं इसके लिए किसी अन्य उपयोग के बारे में नहीं सोच सकता $0, इसलिए मुझे यह समझाने के लिए नुकसान हो रहा है।
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *, हालांकि, दुर्भाग्य से, $0आम तौर पर -sधुन विकल्प के साथ एक बसने योग्य पैरामीटर नहीं हो सकता है ... यह xargsआमतौर पर समान तरीकों में से कई में इस्तेमाल किया जा सकता है, हालांकि। और इसके अलावा अन्य।
--, तो कुछ अन्य कार्यक्रमों में देखा गया 'यहाँ से तर्क शुरू होता है' की सामान्य व्याख्या हो सकती थी। तो फिर, कि उन अपरिचितों को भ्रमित करने के -cलिए सोचने के साथ --वास्तव में उस व्याख्या हो सकती है।
-लिए$0तर्क का उपयोग देखा हैsh -c 'foo $1 $2' - a b। इस तरह यह बहुत सामान्य लगता है (एक बार जब आपको पता चला कि-इसका मतलब क्या है, तो वह है)