Logo

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

فئات أحرف POSIX

نطاقات الشخصيات التقليدية هي طريقة سهلة الفهم وفعالة للتعامل مع مشكلة التحديد السريع لمجموعات الأحرف. لسوء الحظ ، لا يعملون دائمًا. بينما لم نواجه أي مشاكل في استخدامنا لـ البقرى حتى الآن ، قد نواجه مشاكل في استخدام برامج أخرى.

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



[me @ linuxbox ~] $ ls / usr / sbin / [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / مدير الشبكات

[me @ linuxbox ~] $ ls / usr / sbin / [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / مدير الشبكات


(اعتمادًا على توزيع Linux ، سنحصل على قائمة مختلفة من الملفات ، ربما قائمة فارغة. هذا المثال من Ubuntu). ينتج عن هذا الأمر النتيجة المتوقعة-قائمة بالملفات التي تبدأ أسماؤها بحرف كبير ، ولكن:


[me @ linuxbox ~] $ ls / usr / sbin / [AZ] *

/ usr / sbin / biosdecode

/ usr / sbin / chat

/ usr / sbin / chgpasswd

/ usr / sbin / chpasswd

/ usr / sbin / chroot

/ usr / sbin / cleanup-info

/ البيرة / sbin / شكوى

/ usr / sbin / console-kit-daemon

[me @ linuxbox ~] $ ls / usr / sbin / [AZ] *

/ usr / sbin / biosdecode

/ usr / sbin / chat

/ usr / sbin / chgpasswd

/ usr / sbin / chpasswd

/ usr / sbin / chroot

/ usr / sbin / cleanup-info

/ البيرة / sbin / شكوى

/ usr / sbin / console-kit-daemon


باستخدام هذا الأمر نحصل على نتيجة مختلفة تمامًا (يتم عرض قائمة جزئية فقط للنتائج). لماذا هذا؟ إنها قصة طويلة ، ولكن ها هي النسخة القصيرة:

عندما تم تطوير Unix لأول مرة ، كان يعرف فقط عن أحرف ASCII ، وهذه الميزة تعكس هذه الحقيقة. في ASCII ، أول 32 حرفًا (الأرقام من 0 إلى 31) هي رموز تحكم (أشياء مثل علامات الجدولة والمسافات الخلفية وأحرف الإرجاع). يحتوي 32 (32-63) التالي على أحرف قابلة للطباعة ، بما في ذلك معظم علامات الترقيم والأرقام من صفر إلى تسعة. يحتوي الرقم 32 التالي (رقم 64-95) على أحرف كبيرة وعدد قليل من رموز الترقيم. يحتوي الرقم 31 الأخير (الأرقام 96-127) على أحرف صغيرة ورموز أكثر بقطع. بناءً على هذا الترتيب ، استخدمت الأنظمة التي تستخدم ASCII ملف ترتيب الترتيب التي بدت مثل هذا:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz هذا يختلف عن ترتيب القاموس الصحيح ، وهو مثل: aAbBcCdDefFgGhHiIjJkKlLmMnNoOpPqQrRsStTuyvYVw

مع انتشار شعبية Unix خارج الولايات المتحدة ، تزايدت الحاجة لدعم الشخصيات غير الموجودة في اللغة الإنجليزية الأمريكية. تم توسيع جدول ASCII لاستخدام ثماني بتات كاملة ، مع إضافة أحرف أرقام 128-255 ، والتي استوعبت العديد من اللغات الأخرى. لدعم هذه القدرة ، قدمت معايير POSIX مفهومًا يسمى أ محلي، والتي يمكن تعديلها لتحديد مجموعة الأحرف المطلوبة لموقع معين. يمكننا أن نرى إعداد اللغة لنظامنا باستخدام هذا الأمر:



[me @ linuxbox ~] $ صدى $ LANG

en_US.UTF-8

[me @ linuxbox ~] $ صدى $ LANG

en_US.UTF-8


باستخدام هذا الإعداد ، ستستخدم التطبيقات المتوافقة مع POSIX ترتيب ترتيب القاموس بدلاً من ترتيب ASCII. هذا يفسر سلوك الأوامر أعلاه. نطاق حرف من [من الألف إلى الياء] عند تفسيرها بترتيب القاموس ، تشمل جميع الأحرف الأبجدية باستثناء الأحرف الصغيرة "a" ، ومن هنا جاءت نتائجنا.

للتغلب على هذه المشكلة جزئيًا ، يشتمل معيار POSIX على عدد من فئات الأحرف التي توفر نطاقات مفيدة من الأحرف. تم وصفها في الجدول ب-


منخفض:

الجدول 19-2: فئات أحرف POSIX


وصف فئة الحرف

وصف فئة الحرف

[: alnum:] الأحرف الأبجدية الرقمية. في ASCII ، ما يعادل:

[أ-زا-ض0-9]


[:كلمة:] نفس [: alnum:] ، مع إضافة الشرطة السفلية (_) حرف.


[: alpha:] الحروف الأبجدية. في ASCII ، ما يعادل:

[أ-زا-ي]


[: blank:] يتضمن المسافات وحروف الجدولة.


[: cntrl:] رموز التحكم ASCII. يتضمن أحرف ASCII من 0 إلى 31 و 127.


[: digit:] الأعداد من صفر إلى تسعة.


[: رسم بياني:] الشخصيات المرئية. في ASCII ، يتضمن الأحرف 33

من خلال 126.


[: Lower:] الأحرف الصغيرة.


[: علامة:] علامات الترقيم. في ASCII ، ما يعادل:

[-! "# $٪ & '() * +،. / :؛ <=>؟ @ [\\\] _` {|} ~]


[: طباعة:] الأحرف القابلة للطباعة. جميع الشخصيات في [:رسم بياني:]

بالإضافة إلى حرف المسافة.


[: space:] أحرف المسافات البيضاء بما في ذلك المسافة ، وعلامة الجدولة ، والعربة

عودة ، سطر جديد ، علامة تبويب عمودية ، ونموذج تغذية. في ASCII ، ما يعادل:

[\ t \ r \ n \ v \ f]


[: upper:] الأحرف الكبيرة.


[: xdigit:] الأحرف المستخدمة للتعبير عن الأرقام السداسية العشرية. في ASCII ، ما يعادل:

[0-9A-فا-و]



حتى مع فئات الأحرف ، لا تزال هناك طريقة ملائمة للتعبير عن نطاقات جزئية ، مثل [AM].

باستخدام فئات الأحرف ، يمكننا تكرار قائمة الدليل الخاصة بنا ورؤية نتيجة محسّنة:


[me @ linuxbox ~] $ ls / usr / sbin / [[: upper:]] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / مدير الشبكات

[me @ linuxbox ~] $ ls / usr / sbin / [[: upper:]] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / مدير الشبكات


تذكر ، مع ذلك ، أن هذا ليس مثالاً على تعبير عادي ، بل هو تنفيذ الصدفة توسيع اسم المسار. نعرضه هنا لأنه يمكن استخدام فئات أحرف POSIX لكليهما.


العودة إلى ترتيب الترتيب التقليدي

يمكنك اختيار جعل نظامك يستخدم ترتيب الترتيب التقليدي (ASCII) عن طريق تغيير قيمة ملف لانج متغيرات البيئة. كما رأينا أعلاه ، فإن لانج متغير يحتوي على اسم اللغة ومجموعة الأحرف المستخدمة في لغتك. تم تحديد هذه القيمة في الأصل عندما حددت لغة تثبيت حيث تم تثبيت Linux الخاص بك.

لمشاهدة إعدادات اللغة ، استخدم ملف محلي أمر:

[me @ linuxbox ~] $ محلي LANG = en_US.UTF-8 LC_CTYPE = "en_US.UTF-8" LC_NUMERIC = "en_US.UTF-8" LC_TIME = "en_US.UTF-8" LC_COLLATE = "en_US.UTF-8" LC_MONETARY = "en_US.UTF- 8 "LC_MESSAGES =" en_US.UTF-8 "LC_PAPER =" en_US.UTF-8 "LC_NAME =" en_US.UTF-8 "LC_ADDRESS =" en_US.UTF-8 "LC_TELEPHONE =" en_US.UTF-8 "LC_MEASUREMENT =" en_US.UTF-8 "LC_IDENTIFICATION =" en_US.UTF-8 "LC_ALL =

لتغيير اللغة لاستخدام سلوكيات Unix التقليدية ، قم بتعيين لانج متغير ل POSIX:

[me @ linuxbox ~] $ تصدير LANG = POSIX

لاحظ أن هذا التغيير يحول النظام إلى استخدام اللغة الإنجليزية الأمريكية (بشكل أكثر تحديدًا ، ASCII) لمجموعة الأحرف الخاصة به ، لذا تأكد مما إذا كان هذا هو ما تريده حقًا.


يمكنك جعل هذا التغيير دائمًا عن طريق إضافة هذا السطر لك .bashrc

ملف:

تصدير LANG = POSIX


أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: