ایستگاه های کاری آنلاین OnWorks Linux و Windows

لوگو

میزبانی آنلاین رایگان برای ایستگاه های کاری

<قبلی | فهرست | بعدی>

عملیات رشته

مجموعه بزرگی از انبساط ها وجود دارد که می توان از آنها برای کار روی رشته ها استفاده کرد. بسیاری از این بسط ها به ویژه برای عملیات روی نام مسیرها مناسب هستند.

${#پارامتر}

به طول رشته ای که توسط پارامتر. به طور معمول ، پارامتر یک رشته است؛ با این حال، اگر پارامتر است یا @ or *، سپس بسط منجر به تعداد پارامترهای موقعیتی می شود.



[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ echo ""$foo" دارای ${#foo} نویسه است."

"این رشته طولانی است." 20 کاراکتر است

[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ echo ""$foo" دارای ${#foo} نویسه است."

"این رشته طولانی است." 20 کاراکتر است


${پارامتر:چاپ افست}

${پارامتر:چاپ افست:طول}

از این بسط ها برای استخراج بخشی از رشته موجود در آن استفاده می شود پارامتر. استخراج در شروع می شود چاپ افست کاراکترها از ابتدای رشته و تا انتهای رشته ادامه می یابد، مگر اینکه طول مشخص شده است.


[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ اکو ${foo:5}

رشته بلند است

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

رشته

[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ اکو ${foo:5}

رشته بلند است

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

رشته


اگر مقدار از چاپ افست منفی است، به این معناست که از انتهای رشته شروع می شود نه از ابتدا. توجه داشته باشید که قبل از مقادیر منفی باید یک فاصله وجود داشته باشد تا از اشتباه گرفتن آن جلوگیری شود ${پارامتر:-کلمه} به گسترش است. طول، در صورت وجود، نباید کمتر از صفر باشد.

If پارامتر is @، نتیجه گسترش است طول پارامترهای موقعیتی، با شروع در

انحراف.



[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ اکو ${foo: -5}

طولانی

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

lo

[me@linuxbox ~]$ foo="این رشته طولانی است."

[me@linuxbox ~]$ اکو ${foo: -5}

طولانی

[me@linuxbox ~]$ echo ${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%.*}

file.txt

[me@linuxbox ~]$ پژواک ${foo%%.*}

پرونده

[me@linuxbox ~]$ پژواک ${foo%.*}

file.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


گسترش پارامتر چیز خوبی برای دانستن است. بسط دستکاری رشته می تواند به عنوان جایگزینی برای سایر دستورات رایج مانند SED و برش. توسعه‌ها می‌توانند کارایی اسکریپت‌ها را با حذف استفاده از برنامه‌های خارجی بهبود بخشند. به عنوان مثال، ما آن را اصلاح خواهیم کرد طولانی ترین کلمه برنامه مورد بحث در فصل قبل برای استفاده از بسط پارامتر ${#j} به جای دستور تعویض $ (پژواک

-n $j | wc -c) و پوسته فرعی حاصل از آن، مانند زیر:


#! / bin / bash

# longest-word3: پیدا کردن طولانی ترین رشته در یک فایل برای i; انجام دادن

اگر [[ -r $i ]]; سپس max_word= max_len=0

#! / bin / bash

# longest-word3: پیدا کردن طولانی ترین رشته در یک فایل برای i; انجام دادن

اگر [[ -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 نویسه)


واقعی

کاربر

0 متر 3.618 ثانیه

0 متر 1.544 ثانیه

واقعی

کاربر


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 نویسه)


واقعی

کاربر

0 متر 0.060 ثانیه

0 متر 0.056 ثانیه

واقعی

کاربر


sys 0m0.008s

sys 0m0.008s


تصویر

اسکن نسخه اصلی اسکریپت 3.618 ثانیه طول می کشد تا فایل متنی اسکن شود، در حالی که نسخه جدید با استفاده از گسترش پارامتر، تنها 0.06 ثانیه طول می کشد.-یک پیشرفت بسیار مهم.


برترین سیستم عامل Cloud Computing در OnWorks: