ব্রেস এক্সপ্যানসন

Last updated 6 months ago

সকল এক্সপ্যানসন এর মধ্যে ব্রেস এক্সপ্যানসন(Brace expansion) সম্ভবত সবচেয়ে শক্তিশালী। ব্রেসকে চলতিভাষায় আমরা ব্রাকেট বলি বাঙলায়। এবং তিনধরনের ব্রাকেট বা ব্রেসের মধ্যে সেকেন্ড ব্রাকেট বা কার্লি ব্রেস('{}') ব্যবহৃত হবে এখানে। ব্রেস এক্সপ্যানসন ব্যবহার করে আমরা কোনো প্যাটার্নে অনেকগুলো স্ট্রিং তৈরি করতে পারি। একটা উদাহরণ দেখা যাক:

me@howtocode-pc:~$ echo front-{A,B,C}-back
front-A-back front-B-back front-C-back

এক্সপ্যানসনের সময় শুধু ব্রেসের মধ্যবর্তী অংশটুলু এক্সপ্যান্ডেড হবে। তাছাড়া এর সামনে বা পিছনে এমন অংশ জুড়ে দেয়া যায় যা প্রতিটিক্ষেত্রেই একই থাকবে। সামনে এমন কমন অংশ থাকলে এখানে যেমন 'front-' তাকে বলা হয় প্রিমবল্(preamble)। একইভাবে পিছনের অংশকে বলে পোস্টস্ক্রিপ্ট বলে(postscript)। আমরা এক্সপ্যানসনের জন্য ব্রেসের মধ্যে অনেককিছুই ব্যবহার করতে পারি। কয়েটা টেক্সট স্ট্রিং কমা দিয়ে আলাদা করে দিতে পারি। তবে মাথায় রাখতে হবে। ব্রেসের মধ্যে কোথাও স্পেস ব্যবহার করা যাবে না। একটা উদাহরণ দেখা যাক স্ট্রিং এর:

me@howtocode-pc:~$ echo বাঙলা{দেশ,ভাষা,সাহিত্য}
বাঙলাদেশ বাঙলাভাষা বাঙলাসাহিত্য

আমরা প্রিমবল হিসেবে দিয়েছি 'বাঙলা' শব্দটি। আর এক্সপ্যানসনের জন্য ব্রেসের মধ্যে শুধু কমা দিয়ে আলাদা করে তিনটি স্ট্রিং: দেশ, ভাষা ও সাহিত্য। শেল এটাকে এক্সপ্যান্ড করে বাঙলাদেয়, বাঙলাভাষা ও বাঙলাসাহিত্য বানিয়েছে।

তাছাড়াও আমরা নম্বর বা অক্ষরের ক্ষেত্রে রেঞ্জ বলে দিতে পারি। আমরা যদি Number_1 Number_2 এভাবে Number_7 পর্যন্ত দেখতে চাই তাহলে লিখবো:

me@howtocode-pc:~$ echo Number_{1..7}
Number_1 Number_2 Number_3 Number_4 Number_5 Number_6 Number_7

আমরা Number_1 থেকে Number_7 পর্যন্ত চেয়েছি। তাই শুরু হবে 1 দিয়ে ও শেষ হবে 7 দিয়ে। তার মাঝখানে '..'। এটা দিয়ে বোঝানো হলো শুরু(এখানে 1) থেকে শেষ(এখানে 7) পর্যন্ত। আমরা চাইলে 01, 02... এভাবে বা 001, 002 এভাবেও রেঞ্জ দিতে পারি:

me@howtocode-pc:~$ echo {01..15}
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
me@howtocode-pc:~$ echo {001..15}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015

এভাবেই A..Z রেঞ্জ সিলেক্ট করলে অক্ষরগুলো বর্ণানুক্রমে ব্যবহার করবে। আমরা উল্টোদিক থেকেও শুরু করে শুরুতেও আসতে পারি:

me@howtocode-pc:~$ echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

গানিতিক এক্সপ্যানসনের মত ব্রেস এক্সপ্যানসন গুলো মিলিয়ে যৌগিক বা নেস্টেড ব্রেস এক্সপ্যানশনে রূপ দেয়া যায়। মনে করুন আপনার অনেক ছবি আছে সংগ্রহে। একদিন ভাবলেন এলোমেলো করে না রেখে সাল ও মাস অনুযায়ী ফোল্ডার করে রাখবেন। আপনার কাছে ২০১২-২০১৪ সালের ছবি আছে আর আপনি চান photos নামে একটি ফোল্ডার করবেন তারপর তার মধ্যে প্রত্যেক সালের প্রত্যেক মাসের জন্য একটি করে ফোল্ডার করবেন। আপনি অবশ্যই একটি একটি করে ফোল্ডার তৈরি করতে পারেন। কিন্তু তা হবে সময় নষ্ট। আমরা এই কাজটি এভাবে করতে পারি:

me@howtocode-pc:~$ mkdir photos
me@howtocode-pc:~$ cd photos/
me@howtocode-pc:~/photos$ mkdir {2012..2014}-{01..12}
me@howtocode-pc:~/photos$ ls
2012-01 2012-05 2012-09 2013-01 2013-05 2013-09 2014-01 2014-05 2014-09
2012-02 2012-06 2012-10 2013-02 2013-06 2013-10 2014-02 2014-06 2014-10
2012-03 2012-07 2012-11 2013-03 2013-07 2013-11 2014-03 2014-07 2014-11
2012-04 2012-08 2012-12 2013-04 2013-08 2013-12 2014-04 2014-08 2014-12

আমরা প্রথমে photos নামে একটি ফোল্ডার তৈরি করে তাতে ঢুকেছি। তারপর নেস্টেড ব্রেস এক্সপ্যানসন ব্যবহার করে সহজেই ফোল্ডার তৈরি করেছি।