রিদওয়ান বিন শামীম
মেটাক্যারেক্টার
ইউনিক্স সেল বিভিন্ন মেটাক্যারেক্টার ব্যবহার করে যারা সেল স্ক্রিপ্টে ব্যবহৃত হওয়ার সময় স্বতন্ত্র অর্থ প্রকাশ করে। যেমন
*?[]' " \ $ ; & ( ) | ^ < > new-line space tab
উদাহরণ, * বা ? চিহ্ন প্রিন্ট করার জন্য যে কোড লিখব তা হল,
#!/bin/sh echoHello;Word
এটি যে ফলাফল দেখাবে তা হল,
Hello ./test.sh: line2:Word: commandnot found shell returned127
এখন একটি কোটেড ক্যারেক্টার ব্যবহার করে দেখা যাক,
#!/bin/sh echoHello\;Word
এটি যে ফলাফল দেখাবে,
Hello;Word
$ একটি মেটাক্যারেক্টার তাই সেলের ব্যতিক্রমী আচরণ এড়াতে একে কোটেড অবস্থায় রাখতে হবে,
#!/bin/sh echo"I have \$1200"
এটি যে ফলাফল দেবে তা হল,
I have $1200
চার ধরণের কোটিং দেখা যায়,
কোটিং | বর্ণনা |
Single quote | এই কোটের মধ্যবর্তী বিশেষ ক্যারেক্টার তাদের বিশেষ অর্থ হারায় |
Double quote | এই কোটের মধ্যবর্তী বেশিরভাগ বিশেষ ক্যারেক্টার তাদের বিশেষ অর্থ হারায়,ব্যতিক্রমগুলো হল,
|
Backslash | ব্যাকস্লেসকে অনুসরণ করা কোনও ক্যারেক্টার তাদের বিশেষ অর্থ হারায় |
Back Quote | ব্যাককোটের মধ্যবর্তী যেকোনো কিছুই কম্যান্ড, এগুলোকে সম্পাদন করা হয় |
সিঙ্গেল কোট
একটি ইকো কম্যান্ড চিন্তা করা যাক যেটিতে অনেকগুলো সেল কম্যান্ড আছে।
echo<-$1500.**>;(update?)[y|n]
এর প্রত্যেকটি স্পেশাল ক্যারেক্টারের সামনে ব্যাকস্লেস দেয়া শ্রান্তিজনক ও পড়া কঠিন করে ফেলতে পারে।
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
এরকম বড় ক্যারেক্টার গ্রুপকে কোটিং করার একটি সহজ উপায় আছে। স্ট্রিংএর শুরু আর শেষে একটি করে সিঙ্গেল কোট ( ') দিতে হবে,
echo'<-$1500.**>; (update?) [y|n]'
আউটপুট হবে এমন স্ট্রিংএ সিঙ্গেল কোট বসলে পুরো স্ট্রিংকে সিঙ্গেল কোটে রাখার বদলে নিচের উদাহরণের মত করে ব্যাকস্লেস ব্যবহার করতে হবে,
echo'It\'s Shell Programming'
ডাবল কোট
নিচের সেল স্ক্রিপ্ট চেষ্টা করে দেখা যাক, এটি সিঙ্গেল কোটের আচরণ দেখাবে,
VAR=ZARA echo'$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
যার ফলাফল,
$VAR owes<-$1500.**>;[as of(`date +%m/%d`)]
কিন্তু যদি আমরা সাবস্টিটিউট চলক মান চাই ও ইনভার্টেড কমা কার্যকর দেখতে চাই তাহলে ডাবল কোটের মধ্যে নিম্নোক্ত উপায়ে কম্যান্ড লিখতে হবে,
VAR=ZARA echo"$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
এতে করে যে ফলাফল আসবে তা হল,
ZARA owes<-$1500.**>;[as of(07/02)]
ডাবল কোট সব ক্যারেক্টারের স্পেশাল মিনিং নিয়ে নেয় কিছু ব্যতিক্রম ছাড়া
- প্যারামিটারসাবস্টিটিউশনের জন্য $
- কম্যান্ড সাবস্টিটিউশনের জন্য ব্যাককোট
- লিটারেল ডলার সাইনের অনুমোদনের জন্য \$
- লিটারেল ব্যাককোট অনুমোদনের জন্য \`
- এমবেডেড ডাবল কোট অনুমোদনের জন্য \"
- এমবেডেড ব্যাকস্লেস অনুমোদনের জন্য \\
- অন্য সব \ ক্যারেক্টার স্পেশাল নয়
ব্যাক কোট
ব্যাক কোটের মধ্যে সেল কম্যান্ড রাখলে তা সম্পাদন করা হয়, সেল কম্যান্ডকে ব্যাক কোটের মধ্যে রাখার সরল সিনট্যাক্স নিচের উদাহরণে,
var=`command`
যেমন, ডেট কম্যান্ড সম্পাদন করে এর ফলাফলকে ডাটা ভেরিয়েবলে রাখার জন্য,
DATE=`date` echo"Current Date: $DATE"
এটি নিচের ফলাফল প্রদর্শন করবে,
CurrentDate:ThuJul205:28:45 MST2009