কীভাবে $ {0 ## * /} এবং $ {0% / *} কাজ করে?


33

শেল স্ক্রিপ্টে আমি নিম্নলিখিত নিয়মিত প্রকাশগুলি সম্পর্কে বেশ বিভ্রান্ত হয়ে পড়েছি:

${0##*/}
${0%/*}

তারা কিভাবে কাজ করে?

উত্তর:


38

এগুলি নিয়মিত প্রকাশ নয়, এগুলি বাশের প্যারামিটার বিস্তারের উদাহরণ: ভেরিয়েবলের পরিবর্তে বা এর মান অনুসারে একটি বিশেষ পরামিতির বিকল্প। উওউলেজ উইকির একটি ভাল ব্যাখ্যা রয়েছে

মূলত, আপনার যে উদাহরণটি রয়েছে তা ${0##*/}অনুবাদ করে:

ভেরিয়েবল $ 0 এবং প্যাটার্নের জন্য '/', দুটি হ্যাশগুলি প্যারামিটারের শুরু থেকেই বোঝায় , দীর্ঘতম (বা লোভী) ম্যাচটি delete প্যাটার্ন পর্যন্ত এবং মোছা মুছুন।

সুতরাং, $0কোনও ফাইলের নাম কোথায় , উদাহরণস্বরূপ $HOME/documents/doc.txt, তারপরে প্যারামিটারটি প্রসারিত হবে:doc.txt

তেমনি, এর জন্য ${0%/*}, প্যারামিটারের শেষের/ সাথে প্যাটার্নটি মেলানো হয়েছে (দ্য ), সংক্ষিপ্ত বা অ-লোভী মিলটি মুছে ফেলা হয়েছে - যা উপরের উদাহরণে আপনাকে দেবে ।%$HOME/documents

বাশ হ্যাকারের উইকির নিবন্ধটিও দেখুন ।


2
সুতরাং ... তারা ব্যবহার করতে চান না basenameএবং dirname? : ডি
অ্যারন ডি মারাকো

8
একটি সুবিধা হ'ল প্যারামিটার সংকট একটি সাবপ্রসেসের উত্সাহ দেয় না ...
জেসনওয়ারিয়ান ২১

@ জেসনওয়ারিয়ান, আপনি কি উপরের দুটি উদাহরণে * এর কার্যকারিতাটি বিস্তারিতভাবে বর্ণনা করতে পারেন? বা কেন আমাদের সেখানে * রাখতে হবে। সুনির্দিষ্টভাবে, প্রথম উদাহরণে, * আগে // রাখা হয়; দ্বিতীয় উদাহরণে, * * পরে রাখা হয় /। অন্তর্নিহিত পার্থক্য কি? ধন্যবাদ।
ব্যবহারকারী 785099

3
গ্লোব ( *) নির্দেশ করে যে প্যাটার্ন পর্যন্ত সমস্ত কিছু মুছে ফেলা হবে। সুতরাং, প্যারামিটারের শুরুতে #, এটি %ডান থেকে অন্য উপায়ে কাজ করে বাম এবং শেষের দিকে রয়েছে।
জেসনওয়ারিয়ান

5
এটি বাশ-নির্দিষ্ট নয়, এটি পসিক্স দ্বারা নির্দিষ্ট করা হয়েছে sh
nyuszika7h
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.