समूह कमांड और यहां-स्ट्रिंग के साथ अन्य सीमाओं के आसपास काम करना
उपनाम तर्क नहीं ले सकते, लेकिन हम "अनुकरण" कर सकते हैं। उदाहरण के लिए इस प्रश्न पर मेरे उत्तर का उदाहरण लें ।
alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$d"; } <<<'
मुख्य बिंदु जो यहां हो रहे हैं:
- हम
readएक स्ट्रिंग को एक चर में पढ़ने के लिए निर्मित में उपयोग करते हैं d। चूँकि हम रिक्त वर्णों (न्यूलाइन, टैब्स, स्पेस) सहित एक पूर्ण स्ट्रिंग को पढ़ना चाहते हैं, हम IFS=बैकस्लैश से बचकर वापस उपयोग और अक्षम करते हैं -r।
<<<यहाँ यह है कि स्ट्रिंग-संचालक हमें जो भी स्ट्रिंग प्रदान करने की अनुमति देता है वह mkcdउर्फ तर्क के रूप में प्रदान करता है ; उपयोग के रूप में होगाmkcd "some directory"
- उपनाम के भीतर कई आदेशों को
{ list; }संरचना का उपयोग करके वर्तमान शेल में संयोजित और निष्पादित किया जाता है (जिसे मैनुअल के रूप group commandमें जाना जाता है bash)। ध्यान दें कि कमांड के बाद {और ;व्यक्तिगत सूची के लिए प्रमुख स्थान आवश्यक है।
आपके विशिष्ट उदाहरण में हम कर सकते हैं:
alias d='{ IFS= read -r n; dmesg | grep -iw "usb" | tail -n ${n:-5};} <<<'
हम अंतरिक्ष-पृथक तर्कों को संग्रहीत करने के लिए शब्द विभाजन का उपयोग भी कर सकते हैं:
bash-4.3$ { read -r a1 a2; echo "$a1"; echo "$a2";} <<< "arg1 arg2"
arg1
arg2
या हम कई तर्क देने के लिए सरणियों का उपयोग कर सकते हैं:
bash-4.3$ { read -a arr; echo "${arr[1]}"; echo "${arr[0]}";} <<< "arg1 arg2"
arg2
arg1
लेकिन क्या यह अच्छा तरीका है?
जरुरी नहीं। इस तरह के दृष्टिकोण के साथ समस्या यह है कि यह बहुत विशिष्ट है - तर्कों को आसानी से उद्धृत नहीं किया जा सकता है जिसका अर्थ है कि हमारे पास केवल रिक्त स्थान नहीं होने के तर्क हैं।
bash-4.3$ { read -r a1 a2; echo "$a1"; echo "$a2";} <<< "'arg1 with space' arg2"
'arg1
with space' arg2
यह निश्चित रूप से ऐसा कुछ नहीं है जिसका व्यापक रूप से उपयोग किया जाएगा, केवल इसलिए कि वास्तविक दुनिया में हमें जटिल तर्कों से निपटना है, इसलिए यह दृष्टिकोण अधिक व्यावहारिक नहीं है। कार्य कहीं अधिक लचीले हैं। और आर्ग्स स्ट्रिंग को कोट करने की आवश्यकता तेजी से कष्टप्रद हो जाती है।
सीमाओं के बावजूद, यह साधारण स्ट्रिंग्स के साथ काम करता है जहां हम शब्द विभाजन को बर्दाश्त कर सकते हैं, इस प्रकार आंशिक रूप से हमें उपनामों को तर्क देने की अनुमति मिलती है।