OnWorks Linux ו-Windows Online WorkStations

לוגו

אירוח מקוון בחינם עבור תחנות עבודה

<הקודם | תוכן | הבא>

פעולות מיתרים

ישנו סט גדול של הרחבות שניתן להשתמש בהן כדי לפעול על מיתרים. רבות מהרחבות אלו מתאימות במיוחד לפעולות על שמות נתיבים.

${#פרמטר}

מתרחב לאורך המחרוזת הכלולה על ידי פרמטר. בדרך כלל, פרמטר הוא מיתר; לעומת זאת, אם פרמטר הוא או @ or *, אז ההרחבה מביאה למספר הפרמטרים המיקוםיים.



[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo "'$foo' הוא ${#foo} תווים באורך."

'המחרוזת הזו ארוכה'. הוא באורך 20 תווים.

[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo "'$foo' הוא ${#foo} תווים באורך."

'המחרוזת הזו ארוכה'. הוא באורך 20 תווים.


${פרמטר:לקזז}

${פרמטר:לקזז:אורך}

הרחבות אלה משמשות לחילוץ חלק מהמחרוזת הכלולה ב פרמטר. החילוץ מתחיל ב לקזז תווים מתחילת המחרוזת וממשיך עד סוף המחרוזת, אלא אם כן אורך מוגדר.


[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo ${foo:5}

המחרוזת ארוכה.

[me@linuxbox ~]$ הד ${foo:5:6}

מחרוזת

[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo ${foo:5}

המחרוזת ארוכה.

[me@linuxbox ~]$ הד ${foo:5:6}

מחרוזת


אם הערך של לקזז הוא שלילי, זה מתכוון שהוא מתחיל מסוף המחרוזת ולא מההתחלה. שימו לב שלערכים שליליים יש להקדים רווח כדי למנוע בלבול עם ${פרמטר:-מילה} הַרחָבָה. אורך, אם קיים, לא חייב להיות קטן מאפס.

If פרמטר is @, תוצאת ההרחבה היא אורך פרמטרים מיקוםיים, החל מ-

לְקַזֵז.



[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo ${foo: -5}

ארוך.

[me@linuxbox ~]$ echo ${foo: -5:2}

lo

[me@linuxbox ~]$ foo="מחרוזת זו ארוכה."

[me@linuxbox ~]$ echo ${foo: -5}

ארוך.

[me@linuxbox ~]$ echo ${foo: -5:2}

lo


${פרמטר#דפוס}

${פרמטר##דפוס}

הרחבות אלה מסירות חלק מוביל מהמחרוזת הכלולה ב פרמטר מוגדר על ידי דפוס. דפוס הוא דפוס תווים כלליים כמו אלה המשמשים בהרחבת שם נתיב. ההבדל בשתי הצורות הוא שה # טופס מסיר את ההתאמה הקצרה ביותר, בעוד שה ## טופס מסיר את ההתאמה הארוכה ביותר.



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

[me@linuxbox ~]$ echo ${foo##*.}

zip

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

[me@linuxbox ~]$ echo ${foo##*.}

zip


${פרמטר%דפוס}

${פרמטר%%דפוס}

הרחבות אלו זהות ל- # ו ## הרחבות למעלה, אלא שהן מסירות טקסט מקצה המחרוזת הכלולה ב פרמטר ולא מההתחלה.



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

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


[me@linuxbox ~]$ echo ${foo%.*}

file.txt

[me@linuxbox ~]$ echo ${foo%%.*}

פילה

[me@linuxbox ~]$ echo ${foo%.*}

file.txt

[me@linuxbox ~]$ echo ${foo%%.*}

פילה


${פרמטר/דפוס/מחרוזת}

${פרמטר//דפוס/מחרוזת}

${פרמטר/#דפוס/מחרוזת}

${פרמטר/%דפוס/מחרוזת}

הרחבה זו מבצעת חיפוש והחלפה על התוכן של פרמטר. אם נמצא טקסט תואם תו כללי דפוס, הוא מוחלף בתוכן של מחרוזת. בצורה הרגילה, רק ההתרחשות הראשונה של דפוס מוחלף. בתוך ה // טופס, כל המופעים מוחלפים. ה /# טופס דורש שההתאמה תתרחש בתחילת המחרוזת, וה- /% טופס דורש שההתאמה תתרחש בסוף המחרוזת. בכל צורה, /מחרוזת עלול להיות מושמט, מה שגורם לטקסט מותאם על ידי דפוס להימחק.



[me@linuxbox ~]$ foo=JPG.JPG [me@linuxbox ~]$ echo ${foo/JPG/jpg} jpg.JPG

[me@linuxbox ~]$ echo ${foo//JPG/jpg}

jpg.jpg

[me@linuxbox ~]$ echo ${foo/#JPG/jpg}

jpg.JPG

[me@linuxbox ~]$ echo ${foo/%JPG/jpg}

JPG.jpg

[me@linuxbox ~]$ foo=JPG.JPG [me@linuxbox ~]$ echo ${foo/JPG/jpg} jpg.JPG

[me@linuxbox ~]$ echo ${foo//JPG/jpg}

jpg.jpg

[me@linuxbox ~]$ echo ${foo/#JPG/jpg}

jpg.JPG

[me@linuxbox ~]$ echo ${foo/%JPG/jpg}

JPG.jpg


הרחבת פרמטרים היא דבר טוב לדעת. ניתן להשתמש בהרחבות מניפולציית המחרוזות כתחליף לפקודות נפוצות אחרות כגון צמא ו לחתוך. הרחבות יכולות לשפר את היעילות של סקריפטים על ידי ביטול השימוש בתוכנות חיצוניות. כדוגמה, נשנה את המילה הארוכה ביותר התוכנית שנידונה בפרק הקודם כדי להשתמש בהרחבת הפרמטרים ${#j} במקום החלפת הפקודה $(הד

-n $j | wc -c) ותת-המעטפת המתקבלת שלו, כך:


#! / bin / bash

# longest-word3: מצא את המחרוזת הארוכה ביותר בקובץ עבור i; לַעֲשׂוֹת

if [[ -r $i ]]; ואז max_word= max_len=0

#! / bin / bash

# longest-word3: מצא את המחרוזת הארוכה ביותר בקובץ עבור i; לַעֲשׂוֹת

if [[ -r $i ]]; ואז max_word= max_len=0


עבור j ב-$(מחרוזות $i); לַעֲשׂוֹת

len=${#j}

if (( len > max_len )); ואז max_len=$len max_word=$j

fi

עשה

echo "$i: '$max_word' ($max_len תווים)"

פי בוצע

עבור j ב-$(מחרוזות $i); לַעֲשׂוֹת

len=${#j}

if (( len > max_len )); ואז max_len=$len max_word=$j

fi

עשה

echo "$i: '$max_word' ($max_len תווים)"

פי בוצע


לאחר מכן, נשווה את היעילות של שתי הגרסאות באמצעות ה זמן פקודה:



[me@linuxbox ~]$ time longest-word2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 תווים)

[me@linuxbox ~]$ time longest-word2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 תווים)


ממשי

המשתמש

0m3.618s

0m1.544s

ממשי

המשתמש


sys 0m1.768s

[me@linuxbox ~]$ time longest-word3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 תווים)

sys 0m1.768s

[me@linuxbox ~]$ time longest-word3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 תווים)


ממשי

המשתמש

0m0.060s

0m0.056s

ממשי

המשתמש


sys 0m0.008s

sys 0m0.008s


תמונה

לגרסה המקורית של הסקריפט לוקח 3.618 שניות לסרוק את קובץ הטקסט, בעוד שהגרסה החדשה, באמצעות הרחבת פרמטרים, אורכת רק 0.06 שניות-שיפור משמעותי מאוד.


מחשוב ענן מערכת ההפעלה המוביל ב-OnWorks: