প্রথম, নোট করুন যে একক স্ল্যাশ খুব বেশি মেলে:
$ echo $'eegg \n e.g.' | grep e\.g\.
eegg
e.g.
যতদূর বাশ সম্পর্কিত, একটি পালানো সময়কাল একই সময়ের মতো। বাশ পিরিয়ডে গ্রেপ হয়ে যায় । গ্রেপের জন্য, একটি সময়ের কোনও কিছুর সাথে মিল রয়েছে।
এখন, বিবেচনা করুন:
$ echo $'eegg \n e.g.' | grep e\\.g\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\.g\\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\\.g\\\\.
$
বাশ যখন একটি ডাবল-স্ল্যাশ দেখে, এটি একটি একক স্ল্যাশে হ্রাস করে এবং এটি গ্রেপের উপর দিয়ে যায় যা উপরের তিনটি পরীক্ষার প্রথমটিতে, আমরা চাইলে দেখতে পাই, পিরিয়ডের আগে একক স্ল্যাশ। সুতরাং, এটি সঠিক জিনিস না।
ট্রিপল স্ল্যাশ সহ, ব্যাশ প্রথম দুটি কমিয়ে একক স্ল্যাশ করে। এটি তখন দেখে \.
। যেহেতু একটি পালানো সময়ের বাশের কোনও বিশেষ অর্থ নেই, তাই এটি সরল সময়কালে হ্রাস পেয়েছে। ফলাফলটি হ'ল গ্রেপ দেখায়, যেমনটি আমরা চাই, পিরিয়ডের আগে একটি স্ল্যাশ।
চারটি স্ল্যাশ সহ, বাশ প্রতিটি জোড়া একক স্ল্যাশে হ্রাস করে। বাশ দুটি স্ল্যাশ এবং একটি পিরিয়ড গ্রেপ করতে যায়। গ্রেপ দুটি স্ল্যাশ এবং একটি পিরিয়ড দেখে এবং দুটি স্ল্যাশকে একক আক্ষরিক স্ল্যাশে হ্রাস করে । ইনপুটটিতে কোনও অক্ষর অনুসারে আক্ষরিক স্ল্যাশ না থাকলে কোনও মিল নেই।
শেষটি চিত্রিত করতে, মনে রাখবেন যে একক-কোটের ভিতরে সমস্ত অক্ষর আক্ষরিক। সুতরাং, নিম্নলিখিত তিনটি ইনপুট লাইন দেওয়া, গ্রেপ কমান্ড কেবল ইনপুটটিতে আক্ষরিক স্ল্যাশের সাথে লাইনে মিলছে:
$ echo 'eegg
e.g.
e\.g\.' | grep e\\\\.g\\\\.
e\.g\.
বাশের আচরণের সংক্ষিপ্তসার
বাশের জন্য, নিয়মগুলি হ'ল
এভাবে:
$ echo \. \\. \\\. \\\\.
. \. \. \\.
এই সমস্ত বিভ্রান্তি এড়ানোর একটি সহজ উপায় রয়েছে: বাশ কমান্ড লাইনে নিয়মিত প্রকাশগুলি একক-উদ্ধৃতিতে রাখা উচিত। একক উদ্ধৃতিগুলির ভিতরে, বাশ সব ছেড়ে দেয়।
$ echo '\. \\. \\\. \\\\.' # Note single-quotes
\. \\. \\\. \\\\.
\\\.
এবং দেবে\.
তবে তা হয় না। ভাল প্রশ্ন