এখন পর্যন্ত সর্বোত্তম অনুমানটি মনে হচ্ছে আপনি জিজ্ঞাসা করছেন:
আদেশ
ret = "$ (ls" আমার দির ")"
একটি কমান্ডের একটি দুর্দান্ত ভয়ঙ্কর উদাহরণ যাতে চারটি ডাবল-কোট ( "
) চিহ্ন রয়েছে। একজন নির্লিপ্তভাবে আশা করতে পারে যে দ্বিতীয় উক্তিটি প্রথমটির সাথে মিলবে এবং চতুর্থটি তৃতীয়টির সাথে মিলবে, এর মতো:
ret="$(ls "my dir")"
↑-----↑ ↑-↑
যেমন, উদাহরণস্বরূপ, এর সাথে ঘটে
eat "afternoon snack" dinner "midnight snack"
পরিবর্তে, এটি নীচে "কাজ করে":
ret = "$ (ls" আমার দির ")"
↑ ↑ ------ ↑ ↑ ↑
↑ -------------- ↑
নেস্টেড কোটগুলি কেন সেভাবে পার্স করা হয়েছে?
বাশের এই অনুচ্ছেদটি (1)
এটি ব্যাখ্যা করতে পারে:
কমান্ড সাবস্টিটিউশন
⋮
… ফর্মটি ব্যবহার করার সময় , প্রথম বন্ধনীগুলির মধ্যে সমস্ত অক্ষর কমান্ড তৈরি করে।$(command)
আমি এই মানে আপনি কি পরিলক্ষিত হয়েছে, যথা, পাঠ্য অনুমান $(
এবং )
চিকিত্সা করা হয় যেমন যদি এটা আলাদা কমান্ড ছিল তার নিজস্ব পার্সিং / কোট, প্রথম বন্ধনী বাইরে অন্বিত উপাদানের স্বাধীন পেয়ারিং সঙ্গে। আমি স্বীকার করি, আপনি যদি সেই অর্থটি সন্ধান না করেন তবে তা ব্যাখ্যা করা খুব কঠিন।
তবে আপনার প্রশ্নটি যেমন লিখিত হয়েছে, তা বোঝা যায় না। পুরো জিনিসটি $
শেলের খুব বিশেষ অর্থ (গুলি) এর উপর নির্ভর করে । যদি আমরা এটিকে অন্য কোনও মুদ্রার প্রতীক হিসাবে পরিবর্তন করি,
ret="£(ls "my dir")"
তাহলে এটি দুটি শব্দ হিসাবে বিবেচিত হবে:
ret="£(ls "my
(এরপরে)
dir")"
কারণ, যদি কোনও খালি, অ-বিশেষ অক্ষরটি একটি উদ্বোধনী উদ্ধৃতিটির অবিলম্বে বা ক্লোজিং কোটারের অবিলম্বে উপস্থিত হয়, তবে এটি উক্ত অক্ষরের মতো একই স্ট্রিংয়ের অন্তর্ভুক্ত। উদাহরণ স্বরূপ,
cat Wal"*"mart
নামক কোনো ফাইল জন্য দেখায় Wal*mart
, না একটি ফাইল নামক Wal
এক নামক *
, এবং এক নামক mart
-
Wal"*"mart
সমতূল্য Wal\*mart
এবং "Wal*mart"
। একইভাবে, নিম্নলিখিত উদাহরণটি চারটি শব্দ দেখায়:
এক "" দুটি বাকল "আমার" জুতো / ডন t 't / be / a / "" / ক্যাডেট স্কয়ার্ট "(2)"
↑ ------- ↑ ↑ -------------- ↑ ↑ -------------------- ↑ ↑ - ----- ↑
আমি জানি না যে আপনি আপনার প্রশ্নে যে তিন-লাইনের ব্রেকডাউন পেয়েছিলেন তা কোথায় পেয়েছেন।