تعلم البرمجة: ما الفرق بين [و [[في Bash؟


الاجابه 1:

سأسمح لك بالدخول على أسرار زوجين باش الأول هو عمل مشتق. تم استيحاء ميزاتها الأساسية من قذيفة بورن لستيفن بورن. كانت النية الأصلية لـ "Bourne again shell" (bash) هي إعادة تنفيذ مجموعة ميزات متوافقة ، وبناء جملة ، كبرنامج FSF GNU المجاني. أيضًا لم يكن الأمر [أو اختبار] ميزة مضمنة لقذيفة Bourne الأصلية. مكافئ GNU للأمر / bin / test الخارجي ، ولا يزال [link] مثبتًا على نظام Linux كجزء من مجموعة GNU الأساسية

في الإصدارات الحديثة من bash ، يتم بناء أمر الاختبار ، و [الاسم المستعار الخاص به] ، حيث يقوم معظمهم بمحاكاة دلالات الأمر الخارجي. مثل أي bash مضمن في الأمر ، يمكنك تعطيله وتمكينه حسب الحاجة ، أو حتى على الهوى.

هذا هو [[يأتي. إنه أمر اختبار محسّن (بناء جملة). يمكنك قراءة صفحات الرجل لمزيد من التفاصيل ، لكنها خفية إلى حد ما.

على سبيل المثال ، أعرف أن [[يدعم مطابقة التعبير العادية. لا أتذكر متى تمت إضافة ذلك ، ربما في وقت مبكر من bash4. لا أعتقد أن الاختبار المضمن ، أو الإصدار الخارجي ، يدعم هذه المقارنة (يجب عليك استخدام grep في استبدال الأوامر والتحقق من ما حصل من خلال عامل التصفية ، على سبيل المثال).

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


الاجابه 2:

في الممارسة العملية ، لا يوجد فرق كبير بين الترميز [] (الأقواس المفردة) و [[]] (الأقواس المزدوجة) في التعبيرات الشرطية في bash. (بالطبع يمكن استخدام الأقواس المفردة فقط في مراجع الصفيف.)

تاريخ الأصداف هو أن الغلاف C القديم كان له إعداد القوس الفردي ، وبالتالي فإن الأصداف المطورة لاحقًا تدعمه للتوافق. (إذا كنت ترغب حقًا في الذهاب إلى المدرسة القديمة ، استخدم اختبار ... ولكن sheesh!) سمح إعداد القوس المزدوج الجديد بتقديم بعض التحسينات بسهولة. أحد التحسينات على الملاحظة هو أن عوامل إعادة التوجيه (<و>) لم تعد بحاجة إلى الهروب.

من الناحية الفنية [و] عبارة عن أساسيات shell بينما [[و]] كلمات أساسية. إحدى نتائج ذلك هي أن كل غلاف مضمون لدعمه ((متوافق مع POSIX). أيضا الاختبارات التي تدعمها [[قد تختلف من بيئة إلى أخرى.

راجع للشغل ، غالبًا ما تتم معالجة الأسئلة البرمجية ذات الطبيعة التقنية المحددة بشكل جيد على موقع StackExchange. في هذا السياق ، يمكنك استشارة ما هو الفرق بين الأقواس المربعة والثنائية في باش ؟.