OnWorks Linux و Windows Online WorkStations

الشعار

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

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

عمليات السلاسل

هناك مجموعة كبيرة من التوسعات التي يمكن استخدامها للعمل على السلاسل. العديد من هذه التوسعات مناسبة بشكل خاص للعمليات على أسماء المسارات.

{# دولارالمعلمة}

يتوسع في طول السلسلة التي يحتويها المعلمة. بشكل طبيعي، المعلمة هي سلسلة؛ ومع ذلك، إذا المعلمة اما @ or *، ثم يؤدي التوسع إلى عدد المعلمات الموضعية.



[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ "يبلغ طول '$foo' ${#foo} حرفًا."

يبلغ طول 'هذه السلسلة طويلة.' 20 حرفًا.

[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ "يبلغ طول '$foo' ${#foo} حرفًا."

يبلغ طول 'هذه السلسلة طويلة.' 20 حرفًا.


${المعلمة:عوض}

${المعلمة:عوض:الطول}

يتم استخدام هذه التوسعات لاستخراج جزء من السلسلة الموجودة في المعلمة. يبدأ الاستخراج في عوض الأحرف من بداية السلسلة وتستمر حتى نهاية السلسلة، ما لم يتم الطول محدد.


[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ صدى ${foo:5}

السلسلة طويلة.

[me @ linuxbox ~] $ صدى ${foo:5:6}

سلسلة

[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ صدى ${foo:5}

السلسلة طويلة.

[me @ linuxbox ~] $ صدى ${foo:5:6}

سلسلة


إذا كانت قيمة عوض إذا كانت سالبة، يُفهم أنها تبدأ من نهاية السلسلة وليس من بدايتها. لاحظ أنه يجب أن تسبق القيم السالبة بمسافة لتجنب الالتباس مع ${المعلمة:-كلمة} توسيع. الطول، إذا كانت موجودة، يجب ألا تكون أقل من الصفر.

If المعلمة is @, نتيجة التوسع هي الطول المعلمات الموضعية، تبدأ من

عوض.



[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ صدى ${foo: -5}

طويل.

[me @ linuxbox ~] $ صدى ${foo: -5:2}

lo

[me @ linuxbox ~] $ foo="هذه السلسلة طويلة."

[me @ linuxbox ~] $ صدى ${foo: -5}

طويل.

[me @ linuxbox ~] $ صدى ${foo: -5:2}

lo


${المعلمة#النمط}

${المعلمة##النمط}

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



[me @ linuxbox ~] $ foo=file.txt.zip [me @ linuxbox ~] $ صدى ${foo#*.} txt.zip

[me @ linuxbox ~] $ صدى ${foo##*.}

الرمز البريدي

[me @ linuxbox ~] $ foo=file.txt.zip [me @ linuxbox ~] $ صدى ${foo#*.} txt.zip

[me @ linuxbox ~] $ صدى ${foo##*.}

الرمز البريدي


${المعلمة%النمط}

${المعلمة%%النمط}

هذه التوسعات هي نفسها # و ## التوسعات المذكورة أعلاه، باستثناء أنها تزيل النص من نهاية السلسلة الموجودة في المعلمة وليس من البداية.



[me @ linuxbox ~] $ foo=file.txt.zip

[me @ linuxbox ~] $ foo=file.txt.zip


[me @ linuxbox ~] $ صدى ${foo%.*}

ملف.txt

[me @ linuxbox ~] $ صدى ${foo%%.*}

ملف

[me @ linuxbox ~] $ صدى ${foo%.*}

ملف.txt

[me @ linuxbox ~] $ صدى ${foo%%.*}

ملف


${المعلمة/النمط/سلسلة}

${المعلمة//النمط/سلسلة}

${المعلمة/#النمط/سلسلة}

${المعلمة/%النمط/سلسلة}

يؤدي هذا التوسع إلى إجراء بحث واستبدال على محتويات المعلمة. إذا تم العثور على نص يطابق حرف البدل النمط، يتم استبداله بمحتويات سلسلة. في الشكل العادي، فقط الظهور الأول لـ النمط يتم استبداله. في // في النموذج، يتم استبدال جميع الحالات. /# يتطلب النموذج أن تحدث المطابقة في بداية السلسلة، و /% يتطلب النموذج حدوث التطابق في نهاية السلسلة. في كل نموذج، /سلسلة قد يتم حذفها، مما يؤدي إلى مطابقة النص بـ النمط للحذف.



[me @ linuxbox ~] $ foo=JPG.JPG [me @ linuxbox ~] $ صدى ${foo/JPG/jpg} jpg.JPG

[me @ linuxbox ~] $ صدى ${foo//JPG/jpg}

jpg.jpg

[me @ linuxbox ~] $ صدى ${foo/#JPG/jpg}

jpg.JPG

[me @ linuxbox ~] $ صدى ${foo/%JPG/jpg}

JPG.jpg

[me @ linuxbox ~] $ foo=JPG.JPG [me @ linuxbox ~] $ صدى ${foo/JPG/jpg} jpg.JPG

[me @ linuxbox ~] $ صدى ${foo//JPG/jpg}

jpg.jpg

[me @ linuxbox ~] $ صدى ${foo/#JPG/jpg}

jpg.JPG

[me @ linuxbox ~] $ صدى ${foo/%JPG/jpg}

JPG.jpg


من المفيد معرفة توسيع المعاملات. يمكن استخدام توسيعات معالجة السلاسل كبدائل لأوامر شائعة أخرى مثل عطش و مختونيمكن للتوسعات تحسين كفاءة النصوص البرمجية من خلال الاستغناء عن استخدام البرامج الخارجية. على سبيل المثال، سنُعدِّل أطول كلمة البرنامج الذي تمت مناقشته في الفصل السابق لاستخدام توسيع المعلمات ${#j} بدلاً من استبدال الأمر $ (صدى

-n $j | wc -c) والقشرة الفرعية الناتجة عنها، كما هو موضح أدناه:


#! / بن / باش

# longest-word3: البحث عن أطول سلسلة في ملف لـ i ؛ فعل

إذا [[-r $ i]]؛ ثم max_word = max_len = 0

#! / بن / باش

# longest-word3: البحث عن أطول سلسلة في ملف لـ i ؛ فعل

إذا [[-r $ i]]؛ ثم max_word = max_len = 0


بالنسبة إلى j في (سلاسل i)؛ افعل

لين=${#j}

إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ j

fi

فعل

صدى "$ i: '$ max_word' (أحرف max_len $)"

انتهى فاي

بالنسبة إلى j في (سلاسل i)؛ افعل

لين=${#j}

إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ j

fi

فعل

صدى "$ i: '$ max_word' (أحرف max_len $)"

انتهى فاي


بعد ذلك، سنقوم بمقارنة كفاءة الإصدارين باستخدام الوقت أمر:



[me @ linuxbox ~] $ أطول وقت-الكلمة 2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 حرفًا)

[me @ linuxbox ~] $ أطول وقت-الكلمة 2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 حرفًا)


حقيقي

المستخدم

0m3.618s

0m1.544s

حقيقي

المستخدم


0 م 1.768 ثانية

[me @ linuxbox ~] $ أطول وقت-الكلمة 3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 حرفًا)

0 م 1.768 ثانية

[me @ linuxbox ~] $ أطول وقت-الكلمة 3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 حرفًا)


حقيقي

المستخدم

0m0.060s

0m0.056s

حقيقي

المستخدم


0 م 0.008 ثانية

0 م 0.008 ثانية


صورة

يستغرق الإصدار الأصلي من البرنامج النصي 3.618 ثانية لمسح ملف النص، بينما يستغرق الإصدار الجديد، باستخدام توسيع المعلمات، 0.06 ثانية فقط-تحسن كبير جدًا.


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