glob(7)

الاسم
glob - توسيع مسارات الملفات

الوصف
منذ زمن بعيد، في UNIX V6، كان هناك برنامج /etc/glob يقوم بتوسيع أنماط أحرف البدل. بعد ذلك بفترة قصيرة، أصبح هذا مدمجًا في الصدفة.

في هذه الأيام، هناك أيضًا روتين مكتبة glob(3) يؤدي هذه الوظيفة لبرنامج المستخدم.

القواعد هي كما يلي (POSIX.2، 3.13).

  مطابقة أحرف البدل
السلسلة هي نمط حرف بدل إذا احتوت على أحد الأحرف '?' أو '*' أو '['. التوسيع هو العملية التي توسع نمط حرف بدل إلى قائمة مسارات الملفات المطابقة للنمط. تُعرّف المطابقة بما يلي:

'?' (ليس بين قوسين) يطابق أي حرف واحد.

'*' (ليس بين قوسين) يطابق أي سلسلة، بما في ذلك السلسلة الفارغة.

فئات الأحرف

تعبير "[...]" حيث الحرف الأول بعد '[' البادئ ليس '!' يطابق حرفًا واحدًا، أي أي حرف من الأحرف المحصورة بين القوسين. السلسلة المحصورة بين القوسين لا يمكن أن تكون فارغة؛ لذلك يمكن السماح بـ ']' بين القوسين، بشرط أن يكون الحرف الأول. (وبالتالي، "[][!]" يطابق الأحرف الثلاثة '[' و ']' و '!'.)

النطاقات

هناك اصطلاح خاص: حرفان مفصولان بـ '-' يشيران إلى نطاق. (وبالتالي، "[A-Fa-f0-9]" مكافئ لـ "[ABCDEFabcdef0123456789]".) يمكن تضمين '-' بمعناه الحرفي بجعله الحرف الأول أو الأخير بين القوسين. (وبالتالي، "[]-]" يطابق الحرفين ']' و '-' فقط، و "[--0]" يطابق الأحرف الثلاثة '-' و '.' و '0'، حيث لا يمكن مطابقة '/'.)

التكملة

تعبير "[!...]" يطابق حرفًا واحدًا، أي أي حرف لا يطابقه التعبير الناتج عن إزالة أول '!' منه. (وبالتالي، "[!]a-]" يطابق أي حرف واحد باستثناء ']' و 'a' و '-'.)

يمكن إزالة المعنى الخاص لـ '?' و '*' و '[' بوضع شرطة مائلة عكسية قبلها، أو، إذا كان هذا جزءًا من سطر أوامر الصدفة، بإحاطتها بعلامات اقتباس. بين القوسين، تمثل هذه الأحرف نفسها. وبالتالي، "[[?*\]" يطابق الأحرف الأربعة '[' و '?' و '*' و '\'.

  مسارات الملفات
يُطبق التوسيع على كل مكون من مكونات مسار الملف بشكل منفصل. لا يمكن مطابقة '/' في مسار ملف بواسطة حرف بدل '?' أو '*'، أو بواسطة نطاق مثل "[.-0]". النطاق الذي يحتوي على حرف '/' صريح غير صحيح نحويًا. (يتطلب POSIX أن تُترك الأنماط غير الصحيحة نحويًا دون تغيير.)

إذا بدأ اسم ملف بـ '.'، يجب مطابقة هذا الحرف بشكل صريح. (وبالتالي، rm * لن يزيل .profile، و tar c * لن يؤرشف جميع ملفاتك؛ tar c . أفضل.)

  القوائم الفارغة
القاعدة الجميلة والبسيطة المذكورة أعلاه: "توسيع نمط حرف بدل إلى قائمة مسارات الملفات المطابقة" كانت تعريف UNIX الأصلي. سمحت بوجود أنماط تتوسع إلى قائمة فارغة، كما في

    xv -wait 0 *.gif *.jpg

حيث ربما لا توجد ملفات *.gif (وهذا ليس خطأ). ومع ذلك، يتطلب POSIX أن يُترك نمط حرف البدل دون تغيير عندما يكون غير صحيح نحويًا، أو عندما تكون قائمة مسارات الملفات المطابقة فارغة. باستخدام bash، يمكن فرض السلوك الكلاسيكي باستخدام هذا الأمر:

    shopt -s nullglob

(تحدث مشكلات مماثلة في أماكن أخرى. على سبيل المثال، حيث تحتوي النصوص القديمة على

    rm `find . -name "*~"`

تتطلب النصوص الجديدة

    rm -f nosuchfile `find . -name "*~"`

لتجنب رسائل الخطأ من rm المستدعاة بقائمة وسائط فارغة.)

ملاحظات

  التعبيرات المنتظمة
لاحظ أن أنماط البدل ليست تعبيرات منتظمة، رغم تشابهها قليلاً. أولاً، تطابق أسماء الملفات بدلاً من النص، وثانياً، الاصطلاحات ليست متطابقة: مثلاً، في التعبير المنتظم '*' يعني صفراً أو أكثر من نسخ العنصر السابق.

بما أن التعبيرات المنتظمة تحتوي على تعبيرات قوسية حيث يُشار إلى النفي بـ '^'، أعلن POSIX أن تأثير نمط البدل "[^...]" غير محدد.

  فئات المحارف والتدويل
بالطبع، كانت النطاقات في الأصل مخصصة لنطاقات ASCII، بحيث "[ -%]" يمثل "[ !"#$%]" و "[a-z]" يمثل "أي حرف صغير". عممت بعض تطبيقات UNIX هذا بحيث يمثل النطاق X-Y مجموعة المحارف ذات الرموز بين رموز X و Y. لكن هذا يتطلب من المستخدم معرفة ترميز المحارف المستخدم على النظام المحلي، وعلاوة على ذلك، ليس مناسباً إذا اختلف تسلسل الترتيب للأبجدية المحلية عن ترتيب رموز المحارف. لذلك، وسع POSIX تدوين الأقواس بشكل كبير، لكل من أنماط البدل والتعبيرات المنتظمة. فيما سبق رأينا ثلاثة أنواع من العناصر التي يمكن أن تظهر في تعبير قوسي: وهي (i) النفي، (ii) المحارف الفردية الصريحة، و (iii) النطاقات. يحدد POSIX النطاقات بطريقة أكثر فائدة دولياً ويضيف ثلاثة أنواع إضافية:

(iii) النطاقات X-Y تشمل جميع المحارف التي تقع بين X و Y (شاملاً) في تسلسل الترتيب الحالي كما هو معرف بواسطة فئة LC_COLLATE في الإعدادات المحلية الحالية.

(iv) فئات محارف مسماة، مثل

[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
[:digit:]  [:graph:]  [:lower:]  [:print:]
[:punct:]  [:space:]  [:upper:]  [:xdigit:]

بحيث يمكن للمرء قول "[[:lower:]]" بدلاً من "[a-z]"، وتعمل الأمور أيضًا في الدنمارك، حيث توجد ثلاثة أحرف بعد 'z' في الأبجدية. تُعرف فئات المحارف هذه بواسطة فئة LC_CTYPE في الإعدادات المحلية الحالية.

(v) رموز الترتيب، مثل "[.ch.]" أو "[.a-acute.]"، حيث السلسلة بين "[." و ".]" هي عنصر ترتيب معرف للإعدادات المحلية الحالية. لاحظ أن هذا قد يكون عنصراً متعدد المحارف.

(vi) تعبيرات فئة التكافؤ، مثل "[=a=]"، حيث السلسلة بين "[=" و "=]" هي أي عنصر ترتيب من فئة تكافؤه، كما هو معرف للإعدادات المحلية الحالية. مثلاً، "[[=a=]]" قد يكون مكافئاً لـ "[aáàäâ]"، أي لـ "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]".

انظر أيضًا
sh(1), fnmatch(3), glob(3), locale(7), regex(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.