का उपयोग करते हुए "$@"सभी तर्कों को पारित cdकिया $1जाएगा जहां केवल पहले तर्क को पारित किया जाएगा।
अपने उदाहरणों में
$ . cdtest.sh "r st"
हमेशा काम करता है क्योंकि आप केवल एक तर्क में पास होते हैं, लेकिन अगर आप एक झंडे में भी गुजरते हैं तो जैसे
$ . cdtest.sh -L "r st"
तब केवल "$@"सही तरीके से निष्पादित होगा जहां पूरी तरह से निर्देशिका "$1"को cd -Lखोने का विस्तार होगा ।
तथापि
$ . cdtest.sh r st
दोनों मामलों में विफल रहता है क्योंकि आप सीडी में दो पैरामीटर पास कर रहे हैं, rऔर stजो सीडी को निष्पादित करने का एक वैध तरीका नहीं है। पैरामीटर रिक्त स्थान से अलग हो जाते हैं जिन्हें r\ stएक तर्क के रूप में माना जाना चाहिए (आपके पहले उदाहरण में) या बच ( )।
सीडी के मामले में हालांकि यह बहुत झंडे में पारित करने के लिए असामान्य है और आप एकाधिक निर्देशिका में पारित नहीं हो सकता है ताकि आप दोनों में से किसी एक असली दुनिया उपयोग में अंतर नहीं देखेंगे "$1"या "$@"सीडी के लिए। लेकिन अन्य आदेशों के लिए आपको एक अंतर दिखाई देगा, इसलिए "$@"जब भी आप इस तरह का रैपर फंक्शन या स्क्रिप्ट बनाना चाहते हैं, तो इसका उपयोग करना सबसे अच्छा अभ्यास है ।
cd "$*"1 से अधिक arg के साथ सही ढंग से काम नहीं करेगा।