का उपयोग करते हुए "$@"
सभी तर्कों को पारित 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 के साथ सही ढंग से काम नहीं करेगा।