الصفحة الرئيسية » howto » ما الفرق بين الأسعار الفردية والمزدوجة في Bash Shell؟

    ما الفرق بين الأسعار الفردية والمزدوجة في Bash Shell؟

    إن تضمين النص بين علامات التنصيص هو ممارسة قياسية إلى حد ما في سطر الأوامر ، خاصة عند التعامل مع الملفات التي تحتوي على مسافات في الأسماء ، ولكن كيف يمكنك معرفة ما إذا كنت ستستخدم الاقتباس المفرد أو المزدوج؟ دعونا نلقي نظرة على الفرق ، وعندما يجب عليك استخدام واحد مقابل الآخر.

    القاعدة العامة هي أن علامات الاقتباس المزدوجة لا تزال تسمح بتوسيع المتغيرات داخل علامات الاقتباس ، ولا تقبل علامات الاقتباس المفردة. تابع القراءة.

    يقتبس مع نص بسيط

    إذا كنت ترفق ببساطة بضع كلمات من النص ، فلا يهم أيًا من الكلمات التي تستخدمها ، حيث إنهما سيعملان تمامًا. على سبيل المثال ، سيقوم كلا الأمرين بإنشاء دليل باسم Test Directory:

    mkdir "دليل الاختبار"
    مكدير "دليل الاختبار"

    ربما أكثر أنواع من ذوي الخبرة لاحظ أنه يمكنك أيضا استخدام mkdir Test \ Directory إذا أردت.

    التوسع متغير شل

    يصبح الفرق بين علامتي الاقتباس المفردين والمزدوجين أكثر أهمية عندما تتعامل مع المتغيرات في سطر الأوامر افتراضياً ، فستعمل bash لتوسيع متغير مثل اختبار $ في السلسلة الكاملة. أولاً ، سنقوم بتعيين المتغير:

    اختبار = "هذا اختبار"

    الآن يمكنك استخدام هذا المتغير على سطر الأوامر ، مثل هذا ، والذي يجب أن يخرج ببساطة هذا اختبار إلى وحدة التحكم:

    صدى اختبار $

    هنا حيث يصبح الفرق بين الأسعار المزدوجة والوحيدة أكثر وضوحا - عند استخدام علامات الاقتباس المفردة لن يتم توسيع المتغيرات. على سبيل المثال ، إذا قمت بتشغيل هذا الأمر:

    صدى "اختبار $"

    لن ترى سوى "$ test" في سطر الأوامر عند استخدام علامات الاقتباس المفردة ، ولكن سيتم إخراجها بشكل صحيح عند استخدام علامات اقتباس مزدوجة:

    نفس الشيء يعمل عند استخدام الحرف لتوسيع أمر في سطر الأوامر. على سبيل المثال ، لنفترض أنك تريد استخدام الأشخاص ذوي الإعاقة الأمر من داخل أمر آخر - يمكنك استخدام backticks لإخبار shell بتوسيعه:

    صدى "pwd" / اختبار

    إذا كنت في مجلد منزلك ، فسترى مخرجات تبدو كالتالي:

    / الوطن / المهوس / اختبار

    قل ، على سبيل المثال ، أنت في مجلد يحتوي على مسافة في المسار ، وتريد استخدام الأمر ln لإنشاء ارتباط رمزي لملف في الدليل الحالي. تحتاج عادةً إلى تحديد المسار الكامل عند استخدام الأمر ln ، لذلك من الأسهل استخدام "pwd" لحفظ الكتابة.

    انظر ماذا يحدث عند محاولة استخدام الأمر دون تضمين علامات اقتباس:

    ln -s 'pwd' / test / home / geek / linkedname

    بدلاً من ذلك ، ستحتاج إلى الإحاطة بعلامتي اقتباس:

    ln -s "'pwd' / filename" / some / other / path

    للحصول على مثال أكثر واقعية ، لنفترض أن لدينا بنية مجلد مثل هذا المثال ، حيث تحتوي جميع أسماء الملفات على مسافات فيها:

    نظرًا لأن الأمر unzip لا يدعم استخدام * لتشغيله مقابل جميع الملفات ، فستحتاج إلى استخدام الأمر for بدلاً من ذلك. هنا حيث تصبح الأشياء مثيرة للاهتمام:

    لـ f in * .zip ؛ قم بفك ضغط $ f ؛ اكتمل

    وجه الفتاة! يبدو أنه لم ينجح.

    ما سنحتاجه بدلاً من ذلك هو استخدام علامات اقتباس مزدوجة حول المتغير $ f ، على النحو التالي:

    لـ f in * .zip ؛ افعل unzip "$ f" ؛ اكتمل

    الآن في كل مرة يمر فيها الأمر من خلال الحلقة ، فإنه سيعمل فعليًا على تنفيذ أمر مثل هذا:

    بفك ضغط "اختبار 1.zip"

    وبالطبع ، سوف يتم تنفيذ أمر مماثل لكل ملف في الدليل وتشغيله.

    دعونا نستعرض

    الآن بعد أن خضنا الأمثلة ، سنراجعها بسرعة في حالة ما فاتك:

    التنصيص

    • استخدمه عندما تريد وضع متغيرات أو استخدام توسع shell داخل سلسلة.
    • يتم تفسير جميع الأحرف داخلها كأحرف عادية باستثناء $ أو "والتي سيتم توسيعها على shell.

    ونقلت واحدة

    • يتم تفسير جميع الأحرف داخل علامات الاقتباس الفردية كحرف سلسلة.

    وهكذا ينتهي الدرس من الاقتباسات. استخدمها بحكمة.