मुझे शेल स्क्रिप्ट में निम्नलिखित नियमित अभिव्यक्तियों के बारे में काफी उलझन है:
${0##*/}
${0%/*}
वो कैसे काम करते है?
मुझे शेल स्क्रिप्ट में निम्नलिखित नियमित अभिव्यक्तियों के बारे में काफी उलझन है:
${0##*/}
${0%/*}
वो कैसे काम करते है?
जवाबों:
वे नियमित अभिव्यक्ति नहीं हैं, वे बैश के पैरामीटर विस्तार के उदाहरण हैं: एक चर का प्रतिस्थापन या इसके मान से एक विशेष पैरामीटर। द वुलज विकी की अच्छी व्याख्या है ।
मूल रूप से, आपके पास उदाहरण में, इस प्रकार है ${0##*/}:
चर $ 0, और पैटर्न '/' के लिए, पैरामीटर की शुरुआत से दो हैश मतलब है , और पैटर्न सहित सबसे लंबे (या लालची) मैच को हटा दें।
तो, $0फ़ाइल का नाम कहां है, उदाहरण के लिए $HOME/documents/doc.txt, फिर पैरामीटर को इस प्रकार विस्तारित किया जाएगा:doc.txt
इसी तरह, ${0%/*}पैटर्न /को पैरामीटर के अंत ( %) के खिलाफ मिलान किया जाता है , सबसे छोटा या गैर-लालची मिलान हटा दिया जाता है - जो ऊपर दिए गए उदाहरण में आपको देगा $HOME/documents।
बैश हैकर के विकी पर लेख भी देखें ।
*) इंगित करता है कि पैटर्न तक और सहित सब कुछ हटा दिया जाएगा। इसलिए, पैरामीटर की शुरुआत के लिए #, यह बाईं ओर और अंत में है, %दाएं से दूसरे तरीके से काम कर रहा है।
sh।
basenameऔरdirname? : डी