প্রথম কেস:
echo $'$foo'
কোন ইকোস $foo
( $
আমার প্রতিধ্বনি কমান্ডের প্রথমটি বাদ পড়েছে)
প্রথমটি $
কমান্ড হিসাবে চালিত হয়। ইকো আর্গুমেন্টের মধ্যে ফাঁক প্রয়োজন হয় না, এটি কেবল তাদের গ্রহণ করে।
সুতরাং $'$foo'
কমান্ডটি চালানোর জন্য ইকো প্রসারিত হয় $
(যা কোনও আদেশ নয় তাই এটি এড়িয়ে চলে) এবং তারপরে প্রতিধ্বনি হয় '$foo'
। যে কোনও ''
কিছুই মূল্যের মূল্যে নেওয়া হয় - এটি এটিকে বা কোনও কিছুই প্রসারিত করে না। আপনি যা চান তা রাখতে পারেন '' এবং কিছুই হয় না।
আপনি যদি এটির $
সাথে প্রতিস্থাপন করেন $$
তবে প্রক্রিয়া আইডি প্রতিধ্বনিত হয়।
দ্বিতীয়ত:
echo $"$foo"
এই ইকোস pwd
(যার অর্থ ব্যাশ প্রসারিত হয় $foo
, আমার ভেরিয়েবল, এর মান হিসাবে)
কারণ ""
এটি প্রসারিত করতে বাধা দেয় না। ""
তুলনা করার মতো কোনও মান আছে তা নিশ্চিত করতে সাধারণত ব্যবহৃত হয়।
আপনার যদি এমন একটি ভেরিয়েবল থাকে যা খালি থাকতে পারে (যেমন এটি grep
ফলাফল থেকে আসে ) তবে আপনি অন্য মান / ভেরিয়েবলের সাথে তুলনা করতে চান, আপনাকে প্রথম ভেরিয়েবলটি ভিতরে রাখতে হবে ""
। এটি নিশ্চিত করে যে সর্বদা চেক করার তুলনা হয়, কোডের খালি বিভাগের চেয়ে (বাশ দেখায়) যা ত্রুটি দেয়।
পরিশেষে, 3 নম্বর। এটি আকর্ষণীয়।
echo $`$foo`
এই প্রতিধ্বনি $~/scripts
(আমি এটি প্রিন্ট করতে ~/scripts
এবং না আশা করি $~/scripts
)
কারণ (এই ক্ষেত্রে) প্রতিধ্বনিটি $
প্রথমে অক্ষরটি মুদ্রণ করছে । ব্যাকটিক্সে কিছু রাখার ফলে ভেরিয়েবলের মান কমান্ড হিসাবে চালিত হয় (ব্যাশের আরও সাম্প্রতিক সংস্করণে এটি করার আরও ভাল উপায় $(command)
)
সুতরাং প্রথমে এটি ইকোস হয় $
তারপরে এটি প্রসারিত `$foo`
হয় `pwd`
যা চালিত হয় এবং ফিরে আসে ~/Scripts
। তবে আমাদের $
আগে প্রিন্ট ছিল - সুতরাং পুরো আউটপুটটি $~/Scripts
।