কম্পিউটার

ব্যাশ এবং শেল সম্প্রসারণ:অলস তালিকা তৈরি

এটা আবার বছরের সেই সময়! দোকানগুলি যখন রঙিন চকচকে আলোকিত প্লাস্টিকের বিটগুলি রাখা শুরু করে, তখন আমরা সবাই একটু উত্সব অনুভব করতে শুরু করি, এবং উত্সব বলতে আমি বলতে চাচ্ছি কেনাকাটা করা যাক৷ বিশেষ করে, ছুটির দিন উপহার কেনাকাটা! (নিজের জন্য উপহার এখনও উপহার, প্রযুক্তিগতভাবে।)

শুধু তাই এই সব সম্পূর্ণ পাগলাটে না যায়, আপনি কিছু উপহার তালিকা তৈরি করা উচিত. ব্যাশ সাহায্য করতে পারে।

বন্ধনী সম্প্রসারণ

এগুলি ধনুর্বন্ধনী নয়:()

এগুলিও নয়:[]

এইগুলি বন্ধনী হল:{}

ধনুর্বন্ধনী বাশকে তাদের মধ্যে খুঁজে পাওয়া নির্বিচারী স্ট্রিং বা স্ট্রিং দিয়ে কিছু করতে বলে। একাধিক স্ট্রিং কমা দ্বারা পৃথক করা হয়েছে:{a,b,c} . আপনি প্রতিটি প্রসারিত ফলাফলের সাথে সংযুক্ত করার জন্য একটি ঐচ্ছিক প্রস্তাবনা এবং পোস্টস্ক্রিপ্ট যোগ করতে পারেন। বেশিরভাগ ক্ষেত্রে, এটি কিছু টাইপিং সংরক্ষণ করতে পারে, যেমন সাধারণ ফাইল পাথ এবং এক্সটেনশনগুলির সাথে৷

আসুন প্রতিটি ব্যক্তির জন্য কিছু তালিকা তৈরি করি যাকে আমরা জিনিসপত্র দিতে চাই। নিম্নলিখিত কমান্ডগুলি সমতুল্য:

touch /home/me/gift-lists/Amy.txt /home/me/gift-lists/Bryan.txt /home/me/gift-lists/Charlie.txt
touch /home/me/gift-lists/{Amy,Bryan,Charlie}.txt
tree gift-lists

/home/me/gift-lists
├── Amy.txt
├── Bryan.txt
└── Charlie.txt

ওহ ডর্ন, "ব্রায়ান" তার নামের বানান "i" দিয়ে আমি এটা ঠিক করতে পারি।

mv /home/me/gift-lists/{Bryan,Brian}.txt

renamed '/home/me/gift-lists/Bryan.txt' -> '/home/me/gift-lists/Brian.txt'

শেল প্যারামিটার সম্প্রসারণ

শেল প্যারামিটার সম্প্রসারণ আমাদেরকে বন্ধনীতে আবদ্ধ পরামিতিগুলিতে সমস্ত ধরণের পরিবর্তন করতে দেয়, যেমন ম্যানিপুলেট এবং টেক্সট বিকল্প।

কিছু স্টকিং স্টাফ আছে যা আমাদের সমস্ত উপহার প্রাপ্য। চলুন এটি একটি পরিবর্তনশীল করা যাক:

STUFF=$'socks\nlump of coal\nwhite chocolate'

echo "$STUFF"
socks
lump of coal
white chocolate

এখন tee-এর সাহায্যে আমাদের প্রতিটি তালিকায় এই আইটেমগুলি যোগ করতে echo পেতে কমান্ড এবং সুন্দর খেলার জন্য বিস্তৃতি।

echo "$STUFF" | tee {Amy,Brian,Charlie}.txt

cat {Amy,Brian,Charlie}.txt

socks
lump of coal
white chocolate
socks
lump of coal
white chocolate
socks
lump of coal
white chocolate

প্যাটার্ন ম্যাচ প্রতিস্থাপন

দ্বিতীয় চিন্তায়, হয়তো কয়লার গলদা এত সুন্দর উপহার নয়। আপনি ${parameter/pattern/string} আকারে একটি প্যাটার্ন ম্যাচ প্রতিস্থাপন ব্যবহার করে এটিকে আরও ভাল কিছু দিয়ে প্রতিস্থাপন করতে পারেন :

echo "${STUFF/lump of coal/candy cane}" | tee {Amy,Brian,Charlie}.txt

cat {Amy,Brian,Charlie}.txt

socks
candy cane
white chocolate
socks
candy cane
white chocolate
socks
candy cane
white chocolate

এটি "কয়লার পিণ্ড" এর প্রথম উদাহরণটিকে "মিছরি বেত" দিয়ে প্রতিস্থাপন করে। সমস্ত দৃষ্টান্ত প্রতিস্থাপন করতে (যদি একাধিক ছিল), ${parameter//pattern/string} ব্যবহার করুন . এটি আমাদের $STUFF পরিবর্তন করে না পরিবর্তনশীল, তাই আমরা এখনও পরবর্তীতে দুষ্টু কারো জন্য মূল তালিকাটি পুনরায় ব্যবহার করতে পারি।

সাবস্ট্রিং

যখন আমরা জিনিসগুলির উন্নতি করছি, তখন আমাদের গিফটীরা সবাই সাদা চকোলেট পছন্দ করতে পারে না। আমাদের তালিকায় কিছু নিয়মিত চকোলেট যোগ করা ভালো। যেহেতু আমি খুব অলস, আমি শুধু উপরের তীরটি আঘাত করতে যাচ্ছি এবং একটি পূর্ববর্তী ব্যাশ কমান্ড পরিবর্তন করতে যাচ্ছি। ভাগ্যক্রমে, $STUFF-এর শেষ শব্দ ভেরিয়েবল হল "চকলেট", যেটি নয়টি অক্ষর দীর্ঘ, তাই আমি ব্যাশকে বলব ${parameter:offset} ব্যবহার করে সেই অংশটি রাখতে। . আমি tee ব্যবহার করব এর -a a তে পতাকা আমার বিদ্যমান তালিকায় পেন্ড করুন:

echo "${STUFF: -9}" | tee -a {Amy,Brian,Charlie}.txt

cat {Amy,Brian,Charlie}.txt

socks
candy cane
white chocolate
chocolate
socks
candy cane
white chocolate
chocolate
socks
candy cane
white chocolate
chocolate

আপনিও করতে পারেন:

এটি করুন এর সাথে
n থেকে সাবস্ট্রিং পান অক্ষর এগিয়ে ${parameter:n}
x এর জন্য সাবস্ট্রিং পান n থেকে শুরু হওয়া অক্ষর ${parameter:n:x}

সেখানে! এখন আমাদের বেস লিস্ট শেষ। আসুন কিছু ডিমনগ খাই।

পরীক্ষা ভেরিয়েবল

আপনি জানেন, এটি ডিমনগ হতে পারে, কিন্তু আমি মনে করি আমি গতকাল অ্যামির জন্য একটি তালিকা শুরু করেছি এবং এটি একটি পরিবর্তনশীল এ সংরক্ষণ করেছি যাকে আমি amy বলে ডাকতাম . দেখা যাক আমি করেছি কিনা। আমি ${parameter:?word} ব্যবহার করব সম্প্রসারণ এটি word লিখবে স্ট্যান্ডার্ড ত্রুটিতে এবং প্রস্থান করুন যদি কোনো amy না থাকে প্যারামিটার।

echo "${amy:?no such}"

bash: amy: no such

আমি মনে করি না. এর পরিবর্তে হয়তো ব্রায়ান ছিলেন?

echo "${brian:?no such}"

Lederhosen

আপনিও করতে পারেন:

এটি করুন এর সাথে
বিকল্প word যদি parameter আনসেট বা শূন্য ${parameter:-word}
বিকল্প word যদি parameter আনসেট বা শূন্য নয় ${parameter:+word}
word বরাদ্দ করুন parameter এ যদি parameter আনসেট বা শূন্য ${parameter:=word}

কেস পরিবর্তন করা হচ্ছে

সেটা ঠিক! ব্রায়ান বলেছেন যে তিনি কিছু লেডারহোসেন চান এবং তাই আমি নিজেকে একটি নোট তৈরি করেছি। এটি বেশ গুরুত্বপূর্ণ, তাই আমি এটিকে ${parameter^^pattern} দিয়ে বড় অক্ষরে ব্রায়ানের তালিকায় যোগ করব সম্প্রসারণ pattern অংশ ঐচ্ছিক। আমরা শুধুমাত্র ব্রায়ানের তালিকায় লিখছি, তাই আমি শুধু >> ব্যবহার করব tee -a এর পরিবর্তে .

echo "${brian^^}" >> Brian.txt

cat Brian.txt

socks
candy cane
white chocolate
chocolate
LEDERHOSEN

আপনিও করতে পারেন:

এটি করুন এর সাথে
প্রথম অক্ষর বড় করুন ${parameter^pattern}
প্রথম অক্ষর ছোট করুন ${parameter,pattern}
সব অক্ষর ছোট হাতের অক্ষর ${parameter,,pattern}

অ্যারে সম্প্রসারণ

আপনি কি জানেন, এই সমস্ত উপহার-তালিকা ব্যবসা অনেক কাজ. আমি দোকানে যা দেখেছি তার একটি অ্যারে তৈরি করতে যাচ্ছি:

gifts=(sweater gameboy wagon pillows chestnuts hairbrush)

আমি ${parameter:offset:length} আকারে সাবস্ট্রিং সম্প্রসারণ ব্যবহার করতে পারি এই সহজ করতে. আমি প্রথম দুটিকে অ্যামির তালিকায়, মধ্যবর্তী দুটিকে ব্রায়ানের তালিকায় এবং শেষ দুটিকে চার্লির তালিকায় যুক্ত করব। আমি printf ব্যবহার করব নতুন লাইনে সাহায্য করার জন্য।

printf '%s\n' "${gifts[@]:0:2}" >> Amy.txt
printf '%s\n' "${gifts[@]:2:2}" >> Brian.txt
printf '%s\n' "${gifts[@]: -2}" >> Charlie.txt
cat Amy.txt

socks
candy cane
white chocolate
chocolate
sweater
gameboy

cat Brian.txt

socks
candy cane
white chocolate
chocolate
LEDERHOSEN
wagon
pillows

cat Charlie.txt

socks
candy cane
white chocolate
chocolate
chestnuts
hairbrush

সেখানে! এখন আমরা সুপার ব্যক্তিগতকৃত উপহারের তালিকার একটি বিস্তৃত সেট পেয়েছি। ধন্যবাদ বাশ! খুব খারাপ এটা আমাদের জন্য কেনাকাটা করতে পারে না।


  1. কিভাবে বাশে ফাংশন তৈরি এবং কল করবেন

  2. লুপের জন্য ব্যাশ এবং যখন লুপ উদাহরণ

  3. ব্যাশে $$ এবং $BASHPID এর মধ্যে পার্থক্য জানুন

  4. jm-shell - একটি অত্যন্ত তথ্যপূর্ণ এবং কাস্টমাইজড ব্যাশ শেল