bashবেশ কয়েকটি মেটাচার্যাক্টর সংজ্ঞায়িত করে । থেকে man bash:
metacharacter
একটি চরিত্র যে, যখন unquoted, আলাদা শব্দ। নিম্নলিখিতগুলির মধ্যে একটি:
| &; () <> স্পেস ট্যাব
যেহেতু মেটাচারাররা পৃথক পৃথক শব্দ, তারা স্পেস দ্বারা ঘিরে রয়েছে কিনা তা বিবেচ্য নয়। পাইপ প্রতীক, |একটি মেটাচ্যারাক্টর এবং অতএব, আপনি যেমনটি লক্ষ্য করেছেন, এর চারপাশে ফাঁকা জায়গাগুলির প্রয়োজন নেই।
মনে রাখবেন যে, [, ], {, }, এবং =হয় না metacharacters। বিপরীতে তাদের অর্থ, তারা ফাঁকা দ্বারা ঘিরে আছে কিনা তা দৃ strongly়ভাবে নির্ভর করে।
কখন স্পেস রয়েছে এবং এর প্রয়োজন নেই তার উদাহরণ
যেমন আপনি লক্ষ্য করেছেন, এটি |ফাঁকা স্থান দ্বারা ঘিরে রয়েছে কিনা তা বিবেচ্য নয়। আসুন আমরা কয়েকটি উদাহরণ বিবেচনা করি যা সাধারণত ব্যাশ ব্যবহারকারীদের বিভ্রান্ত করে। বিবেচনা:
$ (date)
Sun Mar 1 12:47:07 PST 2015
উপরের প্যারেনগুলি dateকমান্ডটি সাব-শেলের মধ্যে চালিত করতে বাধ্য করে । কারণ (এবং )মেটাচার্যাক্টর, কোনও স্পেসের প্রয়োজন নেই। বিপরীতে:
$ {date}
bash: {date}: command not found
যেহেতু {এবং }হয় না metacharacters, শেল একইরূপে {date}এক শব্দ হিসাবে। dateকমান্ডটি সন্ধান করার পরিবর্তে এটি নামের একটি আদেশের সন্ধান করে {date}। কারণ এটি একটি খুঁজে পায় না, একটি ত্রুটির ফলাফল।
আর একটি সাধারণ সমস্যা হ'ল testকমান্ড। নিম্নলিখিতটি সফলভাবে কাজ করে:
$ [ abc ] && echo Yes
Yes
স্পেসগুলি সরান এবং একটি ত্রুটি ঘটে:
$ [abc] && echo Yes
bash: [abc]: command not found
কারণ [এবং ]হয় না metacharacters, শেল একইরূপে [.bashrc]একটি একক শব্দ এবং এর ফলে শুধু মত dateউদাহরণ, একটি ত্রুটি নেই।
অ্যাসাইনমেন্টের বিবৃতিগুলি ফাঁকা জায়গাগুলির প্রতিও সংবেদনশীল। নিম্নলিখিত অ্যাসাইনমেন্টটি সফল:
$ v=date
$ echo $v
date
একটি স্থান যুক্ত করুন এবং অ্যাসাইনমেন্ট ব্যর্থ:
$ v= date
Sun Mar 1 12:55:05 PST 2015
উপরের শেলটি অস্থায়ীভাবে vখালি হয়ে যায় এবং তারপরে dateকমান্ডটি কার্যকর করে।
এর আগে একটি স্থান যুক্ত =করাও ব্যর্থতার কারণ হয় তবে ভিন্ন কারণে:
$ v =date
bash: v: command not found
এখানে, শেল vআর্গুমেন্ট দিয়ে কমান্ডটি কার্যকর করার চেষ্টা করে =date। ত্রুটিটি কারণ এটি কোনও আদেশের নাম পাওয়া যায় নি v।