هل القوس المربع '[' في لينكس أمر تنفيذي حقيقي

نظرة عامة

يظن الغالبية العظمى من مطوري ومسؤولي أنظمة لينكس أن القوس المعقوف [ ليس سوى محرف رمزي داخل تركيب جمل صدفة باش (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 ]:
من طبيعة عمل الأمر [ أنه يعمل بصمت تام دون إرسال مخرجات مرئية إلى قنوات العرض القياسية، ويكتفي بتسجيل النتيجة المنطقية مباشرة في حالة الخروج للعملية.

![إجراء مقارنة رقمية بواسطة الأمر لاختبار القيمة الأكبر

لقراءة مخرجات المقارنة الأخيرة من ذاكرة الصدفة، نستعلم فوراً عبر المتغير الخاص بواسطة الأمر echo $?:
تشير القيمة المعادة 0 في معايير بيئات يونكس ولينكس إلى النجاح التام للعملية، وهو ما يعني هنا أن الشرط المنطقي تحقق وأعطى قيمة صواب (True).

عرض قيمة متغير حالة الخروج للشرط الصحيح

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

تقييم شرط غير متحقق باستخدام خيار الأصغر من

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

التحقق من رمز خطأ التقييم المنطقي عبر echo

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 قراءة المحتوى وطباعته في سياق التنفيذ.

استخدام القوس المعقوف كشرط فحص داخل بنية if التكرارية

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

حذف ملفات الاختبار وتنظيف الدليل المؤقت بالكامل

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