আপনার শেলটি কোট করার আগে উভয় '
এবং উভয়ই কোটকে ব্যাখ্যা করে । আমি সাধারণত আমার যুক্তির চারপাশে ডাবল উদ্ধৃতিগুলি প্রতিধ্বনিত করে এমনকি যদি তারা অপ্রয়োজনীয় হয়; উদাহরণ স্বরূপ:"
echo
$ echo "Hello world"
Hello world
সুতরাং আপনার প্রথম উদাহরণে, আপনি যদি নিজের আউটপুটে আক্ষরিক উক্তি চিহ্নগুলি অন্তর্ভুক্ত করতে চান তবে সেগুলি হয় পালাতে হবে:
$ echo \'Hello world\'
'Hello world'
বা এগুলি ইতিমধ্যে একটি উদ্ধৃত যুক্তির মধ্যে ব্যবহার করা দরকার (তবে এটি একই ধরণের উদ্ধৃতি হতে পারে না, তবে আপনাকে যেভাবেই এড়িয়ে যেতে হবে):
$ echo "'Hello world'"
'Hello world'
$ echo '"Hello world"'
"Hello world"
আপনার দ্বিতীয় উদাহরণে, আপনি স্ট্রিংয়ের মাঝখানে একটি কমান্ড প্রতিস্থাপন চালাচ্ছেন:
grep $ARG /var/tmp/setfile | awk {print $2}
যেগুলি দিয়ে শুরু হয় $
সেগুলি শেল দ্বারা বিশেষভাবে পরিচালনা করা হয় - এটি তাদেরকে ভেরিয়েবল হিসাবে বিবেচনা করে এবং তাদের মানগুলির সাথে প্রতিস্থাপন করে। যেহেতু সম্ভবত খুব সহজেই এই শেরাগুলির দুটিই আপনার শেলের মধ্যে সেট করা নেই, এটি আসলে চালিত হয়
grep /var/tmp/setfile | awk {print}
যেহেতু grep
কেবল একটি যুক্তি দেখেছে তাই এটি ধরে নেওয়া হয় যে আর্গুমেন্টটি আপনি যে প্যাটার্নটি অনুসন্ধান করছেন তা হ'ল এবং এটি থেকে ডেটা পড়ার জায়গাটি স্টিডিন তাই এটি ইনপুটটির জন্য অপেক্ষা করতে অবরুদ্ধ করে। এজন্য আপনার দ্বিতীয় কমান্ডটি কেবলমাত্র স্তব্ধ অবস্থায় উপস্থিত হবে।
আপনি যদি আর্গুমেন্টটি এককভাবে উদ্ধৃত করেন (তবে এটিই আপনার প্রথম উদাহরণটি প্রায় কাজ করেছিল), তবে আপনার আউটপুটটি পাওয়ার এটি একটি উপায়:
echo \'' echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` '\'
আপনি এটির দ্বিগুণ-উদ্ধৃতিও দিতে পারেন, তবে তারপরে আপনাকে পালাতে হবে $
যাতে শেলটি তাদের পরিবর্তনশীল হিসাবে সমাধান না করে এবং ব্যাকটিক্স দেয় যাতে শেলটি এখনই কমান্ড প্রতিস্থাপনটি চালায় না:
echo "' echo PARAM=\` grep \$ARG /var/tmp/setfile | awk '{print \$2}' \` '"