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


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

-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 in $ (سلاسل $ i) ؛ فعل

لين = $ {# j}

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

fi

فعل

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

انتهى فاي

لـ j in $ (سلاسل $ i) ؛ فعل

لين = $ {# j}

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

fi

فعل

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

انتهى فاي


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



[me @ linuxbox ~] $ أطول وقت-word2 dirlist-usr-bin.txt

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

[me @ linuxbox ~] $ أطول وقت-word2 dirlist-usr-bin.txt

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


حقيقي

المستخدم

0m3.618s

0m1.544s

حقيقي

المستخدم


0 م 1.768 ثانية

[me @ linuxbox ~] $ أطول وقت-word3 dirlist-usr-bin.txt

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

0 م 1.768 ثانية

[me @ linuxbox ~] $ أطول وقت-word3 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: