ما الفرق بين الأسعار الفردية والمزدوجة في 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.
ونقلت واحدة
- يتم تفسير جميع الأحرف داخل علامات الاقتباس الفردية كحرف سلسلة.
وهكذا ينتهي الدرس من الاقتباسات. استخدمها بحكمة.