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