نظرة عامة
يظن الغالبية العظمى من مطوري ومسؤولي أنظمة لينكس أن القوس المعقوف [ ليس سوى محرف رمزي داخل تركيب جمل صدفة باش (Bash syntax)، ولكن المفاجأة التقنية تكمن في كونه برنامجاً قائماً بذاته يمكن استدعاؤه كأي أداة أخرى على النظام. يتناول هذا الدليل التشريح العميق لحقيقة هذا الأمر، وكيفية معالجته للشروط داخلياً، إضافة إلى الطريقة القياسية لتفسير كود الحالة الانتهائية ($?) واستثماره في كتابة سكربتات أكثر متانة.
1. إثبات الهوية البرمجية للأمر ‘[’ وتحديد مساره التنفيذي
للتحقق عملياً من وجود مسار ملف تنفيذي مستقل يمثل القوس المربع ([ داخل النظام، ننفذ الأمر which [:
يكشف المخرج /usr/bin/[ فوراً عن حقيقة قاطعة: القوس المعقوف ليس مجرد بنية لغوية داخلية للصدفة، بل هو ملف ثنائي مستقل مخزن في شجرة الملفات الثنائية لنظام أوبونتو.
⚙️ [أهم المعاملات والخيارات التشغيلية]
-f : يتحقق مما إذا كان المسار يشير إلى ملف عادي (Regular File).-d : يختبر ما إذا كان الهدف دليلاً (Directory).-e : يتأكد من الوجود الفعلي للملف أو المجلد على القرص أياً كان نوعه.-z : يختبر ما إذا كانت السلسلة النصية فارغة تماماً (طولها صفر).-n : يتحقق من أن السلسلة النصية تحتوي على محارف (غير فارغة).= : يقارن بين سلسلتين نصيتين للتحقق من التطابق التام.-eq : يفحص التساوي الرياضي بين قيمتين عدديتين صحيحتين.-ne : يتحقق من عدم تساوي قيمتين عدديتين صحيحتين.
![التحقق من مسار ملف الأمر عبر which
لفحص كيفية تفسير بيئة الصدفة الحالية للأمر [ وأولويات البحث الخاصة بها بدقة، نستعين بالأمر type -a [:
تُظهر النتائج ازدواجية معمارية مثيرة؛ فالصدفة تتعامل معه كأمر مدمج عالي الأداء (shell builtin) أولاً، مع احتفاظها في الوقت نفسه برابط لملف تنفيذي خارجي على القرص في المسارين /usr/bin/[ و/bin/[.
![استكشاف طبيعة الأمر وتصنيفه عبر type -a
للاطلاع المباشر على سمات الملف الثنائي وحجمه وصلاحيات تشغيله في مساره الأصلي، نطبق الأمر ls -l /usr/bin/[:
يتبين من السمات بوضوح امتلاكه لصلاحيات التنفيذ الكاملة (-rwxr-xr-x)، مما يبرهن على أنه تطبيق مستقل بكل المقاييس وليس مجرد خدعة بصرية في الطرفية.
![فحص أذونات وحجم الملف التنفيذي في usr/bin
2. آليات التقييم المنطقي واستنتاج النتيجة عبر شيفرة الخروج ($?)
لإجراء عملية موازنة رقمية تختبر ما إذا كان الرقم 10 أكبر من الرقم 5 مستخدمين خيار الموازنة (-gt اختصاراً لـ greater than)، ننفذ الأمر [ 10 -gt 5 ]:
من طبيعة عمل الأمر [ أنه يعمل بصمت تام دون إرسال مخرجات مرئية إلى قنوات العرض القياسية، ويكتفي بتسجيل النتيجة المنطقية مباشرة في حالة الخروج للعملية.

لاختبار سلوك الفشل المنطقي، نطلب تقييم ما إذا كان الرقم 10 أصغر من 5 باستخدام (-lt اختصاراً لـ less than) عبر تشغيل [ 10 -lt 5 ]:
كما هو متوقع، ينتهي التقييم دون إخراج نصي على الشاشة، وتُسجل حالة عدم تحقق الشرط ضمنياً في سجلات الصدفة.

لإظهار كيف يعبر النظام عن عدم تحقق الفرضية السابقة، ننفذ مجدداً echo $?:
تؤكد القيمة غير الصفرية المعادة للمستخدم أن التقييم كان خاطئاً (False)، ما يمنح السكربتات آلية قطعية لاتخاذ قرارات التوجيه والتفرع.

3. تطبيقات عملية لفحص الملفات والمجلدات (-f, -d, -s)
لبناء بيئة اختبارية معزولة ومحاكاة عمليات التحقق من الموارد، ننشئ مجلداً مخصصاً ونلحقه بملف فارغ عبر الأمر المدمج mkdir -p /tmp/bracket_test && touch /tmp/bracket_test/sample.txt:

للتيقن برمجياً من أن المسار المعني ينتمي فعلياً لفئة الملفات القياسية، نجمع بين أداة الفحص والربط الشرطي بتنفيذ [ -f /tmp/bracket_test/sample.txt ] && echo "파일이 정상적으로 존재합니다":
بما أن الهدف ملف قياسي وموجود، تكتمل حلقة المعامل المنطقي && ليطبع النظام رسالة التأكيد المرفقة.

للتحقق من طبيعة الدليل نفسه وما إذا كان يشكل مجلداً حقيقياً على النظام، نمرر المعامل المخصص عبر [ -d /tmp/bracket_test ] && echo "디렉터리가 맞습니다":
تؤكد حالة الخروج الناجحة صحة المسار كدليل، ما يؤدي مباشرة إلى تفعيل الشق الثاني للأمر وإظهار العبارة التوضيحية.

لفحص ما إذا كان الملف يحتوي على بيانات فعلية أم أنه خاوٍ، نستخدم خيار قياس الحجم عبر [ -s /tmp/bracket_test/sample.txt ] || echo "파일 크기가 0(비어있음)입니다":
حيث إن الملف الذي أنشأناه للتو صفر البايتات، يفشل الاختبار المنطقي تلقائياً، وهو ما يحفز تشغيل كتلة المعامل البديل || لتنبيهنا بفراغ الملف.

4. التكامل مع الجمل الشرطية (if) في بيئات الإنتاج والتقييم السريع
لتهيئة سيناريو عملي يحاكي تدفق البيانات الحقيقية داخل السكربتات، نضخ نصاً تجريبياً في الملف المستهدف عبر الأمر echo "Ubuntu Shell Test" > /tmp/bracket_test/sample.txt:

لدمج الأمر [ بصورة احترافية ضمن هيكل جملة if الشرطية كما هو متبع في نصوص باش المتقدمة، نطبق الأمر if [ -s /tmp/bracket_test/sample.txt ]; then echo "내용 확인: $(cat /tmp/bracket_test/sample.txt)"; fi:
نظراً لأن الملف أصبح مشحوناً بالبيانات ويتجاوز حجمه الصفر، يمر الشرط بنجاح متيحاً لكتلة then قراءة المحتوى وطباعته في سياق التنفيذ.

بعد الانتهاء من كافة التجارب، نحافظ على نظافة مساحة التخزين المؤقتة بإزالة مجلد التدريب وملحقاته نهائياً عبر rm -rf /tmp/bracket_test:

قدمت هذه الجولة التقنية رؤية شاملة لطبيعة الأمر [ كأداة تشغيلية متكاملة في أنظمة لينكس، مع كشف الارتباط الوثيق بين نتائج التقييم المنطقي ورموز الخروج الرقمية. نأمل أن تسهم هذه المفاهيم في تعميق فهمك لكواليس معالجة النصوص التفاعلية وتمكينك من بناء سكربتات باش تتسم بأعلى معايير الاستقرار والكفاءة.