কমান্ড প্রতিস্থাপনের ক্ষেত্রে বাশ উদ্ধৃত হয়নি


3

কেউ আমাকে ব্যাখ্যা করতে পারে যে এটি কেন কাজ করছে (কোনও ডিরেক্টরিতে যার নামে একটি সাদা জায়গা রয়েছে তার তালিকাভুক্তকরণ):

ret="$(ls "my dir")"

এটি বরং ব্যাখ্যা করা উচিত নয়:

ret="$(ls "
my dir
")"

উদাহরণস্বরূপ:

ls "my" "dir"

এবং

ls "my dir"

আমি জিজ্ঞাসা করছি কেন ret = "$ (ls" আমার দির ")" কাজ করছে।
ব্যবহারকারী 2279268

আমি কেবল অনুমান করতে পারি যে বাশ যথেষ্ট "স্মার্ট" এটি দেখতে যথেষ্ট যে একটি "$("একটি সিনট্যাক্স ত্রুটি হতে পারে ( $ভিতরে "মূল্যায়ন করা হয়) এবং অন্য ম্যাচটি অনুসন্ধান করার চেষ্টা করে যা "এই ক্ষেত্রে বাসা বাঁধার অনুমতি দেয় ।
স্লিজারড

উত্তর:


6

এখন পর্যন্ত সর্বোত্তম অনুমানটি মনে হচ্ছে আপনি জিজ্ঞাসা করছেন:

আদেশ

    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)"
    ↑ ------- ↑ ↑ -------------- ↑ ↑ -------------------- ↑ ↑ - ----- ↑

আমি জানি না যে আপনি আপনার প্রশ্নে যে তিন-লাইনের ব্রেকডাউন পেয়েছিলেন তা কোথায় পেয়েছেন।


আমি এটি আচরণ করব এমনটাই আশা করি।
ব্যবহারকারী 2279268
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.