وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

چگونه از $IFS در Bash استفاده کنیم؟

0 5
زمان لازم برای مطالعه: 4 دقیقه


IFS مخفف Internal Field Separator است که یک متغیر محیطی در پوسته برای تعیین جداکننده است. $IFS روش کلمات را مشخص می کند روی خط فرمان محدود شده اند. به‌طور پیش‌فرض، جداکننده‌های فیلد (IFS) فضا، برگه و خط جدید هستند، اما می‌توانیم این را در اسکریپت خود تغییر دهیم تا با الزامات مطابقت داشته باشد. بیشتر برای حلقه ها برای دستکاری عناصر موجود در لیست مشخص شده استفاده می شود. ما از متغیر $IFS در اسکریپت Bash خود برای تقسیم رشته استفاده می کنیم زیرا Bash دارای مکانیزم داخلی برای تقسیم رشته نیست.

مثال 1: اسکریپت Bash بدون اپراتور $IFS

اسکریپت Bash زیر را در نظر بگیرید که در آن عناصر با فضای خالی جدا شده اند. در اینجا، ما از عملگر $IFS برای دیدن خروجی اسکریپت معمولی Bash استفاده نمی کنیم. ما فایل “Bash.sh” را ایجاد می کنیم و سپس آن را باز می کنیم تا برنامه چاپ رشته را بنویسیم روی پوسته Bash ما با اعلان متغیری با عنوان “$MySentence” شروع می کنیم و این متغیر را با رشته طولانی مشخص می کنیم. ما کلمات مختلفی در رشته داریم که با فاصله تقسیم می شوند. سپس، حلقه foreach را برای چاپ هر کلمه از رشته “$MySentence” فراخوانی می کنیم. حلقه foreach با شی “MyWords” تنظیم می شود که کلمه تکرار شده را از رشته نگه می دارد. پس از آن، کلمات تکرار شده از رشته را با دستور echo که بین دستور do و done قرار می گیرد، بازتاب می دهیم.

#!/usr/bin/env bash

جمله من=“Bash یک برنامه نویسی موثر است”

برای MyWords که در $MySentence
انجام دادن

اکو $MyWords
انجام شده

باز کن terminal با کلید میانبر «Ctrl+Alt+T» و کامپایل «bashفایل .sh با دستور Bash. کلمات نمایش داده شده در پوسته در یک خط جداگانه قرار دارند زیرا فاصله، زبانه ها و خط جدید جداکننده فیلد در Bash در نظر گرفته می شوند.

$ bash ./باش.ش

چگونه از $IFS در Bash استفاده کنیم؟

مثال 2: اسکریپت Bash با اپراتور $IFS

کلمات را در رشته مشخص شده بدون استفاده از عملگر $IFS جدا می کنیم. می توانیم از عملگر $IFS با کاراکتر مورد نظر استفاده کنیم. اگر IFS پیش‌فرض را تغییر دهیم، این یک استراتژی عاقلانه است که IFS قدیمی را در یک متغیر ذخیره کنیم. هنگامی که وظایف مورد نیاز خود را کامل کردیم، می‌توانیم کاراکتر اصلی را به IFS اختصاص دهیم. بیایید اسکریپت Bash را داشته باشیم که در آن از عملگر $IFS برای جداسازی کلمات استفاده می شود.

پیشنهاد می‌کنیم بخوانید:  فرمان Bash یافت نشد، دلایل و راه حل های رایج

در اینجا، رشته را به عنوان نام افراد مشخص می کنیم که با دو نقطه کاراکتر “:” در داخل متغیر “Persons” از هم جدا می شوند. سپس، مقدار اصلی IFS را در ویژگی “Pre_ifs” ذخیره می کنیم. در مرحله بعد، متغیر IFS را در جایی که کولون “:” به عنوان جداکننده تنظیم شده است، اعلام می کنیم. متغیر IFS به عنوان نشانه کلمه استفاده می شود که برای حلقه for استفاده می شود. ما از حلقه foreach برای عبور از رشته متغیر “Persons” به صورت تقسیم استفاده می کنیم و تمام عناصر رشته را به شی “Per” حلقه for-each منتقل می کنیم. سپس از دستور echo در دستورات do و done برای نمایش رشته های جدا شده استفاده می کنیم.

#/صندوقچه/bash

افراد=الکس:توماس:کایل:جنی
Pre_ifs=$IFS
IFS=“:”
برای مطابق که در $Persons
انجام دادن

اکو نام اشخاص هستند $ در هر
انجام شده

آن را با فایل اسکریپت Bash در کامپایل کنید terminal برای دیدن خروجی استفاده از عملگر IFS. هنگامی که فایل Bash عملگر IFS اجرا می شود، هر رشته را به فرمت زیر جدا می کند:

چگونه از $IFS در Bash استفاده کنیم؟چگونه از $IFS در Bash استفاده کنیم؟

مثال 3: Bash اسکریپت با اپراتور $IFS برای نمایش نام کاربری از فایل

اکنون از عملگر $IFS در اسکریپت Bash برای نمایش نام کاربران از فایل “/etc/passwd” استفاده می کنیم. ما در اینجا از عملگر $IFS استفاده می کنیم که هر نام کاربری را در پوسته جدا می کند. اسکریپت Bash زیر با اعلان متغیر “IFS” شروع می شود که با کاراکتر “$’\n” و یک کولون “:” تنظیم شده است. کاراکتر $’\n’ یک کاراکتر خط جدید است که برای دنباله فرار استفاده می شود. نام های کاربری از طریق IFS ارائه شده جدا می شوند.

پس از این، یک متغیر “x” داریم که مقدار آن “1” است. سپس، از دستور cat با فایل “/etc/passwd” استفاده می کنیم که نام کاربری را به شی “user” حلقه foreach ارسال می کند تا روی همه کاربران فایل “/etc/passwd” تکرار شود. دستورات “do” و “done” با دستورات شرطی “if” تودرتو برای بازتاب کاربران مشخص می شوند.

IFS=$‘\n’:
ایکس=1
برای کاربر که در `گربه /و غیره/passwd`
انجام دادن

اگر [ $x -eq 1 ]

سپس

اکو $user

فی

اگر [ $x -eq 7 ]

سپس

ایکس=1

دیگر

ایکس=$((x+1))

فی
انجام شده

ما اسکریپت Bash را اجرا می کنیم روی به شرح زیر terminal صفحه‌ای که به کاربران «/etc/passwd» توسط جداکننده فیلد مشخص شده خروجی می‌دهد:

چگونه از $IFS در Bash استفاده کنیم؟چگونه از $IFS در Bash استفاده کنیم؟

مثال 4: اسکریپت Bash خط فرمان با $IFS

IFS یک متغیر پوسته خاص است، بنابراین می توانیم مستقیماً از آن در خط فرمان استفاده کنیم. در اینجا، ما یک میانبر برای استفاده از عملگر IFS داریم. به جای ایجاد یک فایل اسکریپت Bash جداگانه، ما آن را باز می کنیم terminal و متغیر “IFS” را تعریف کنید. متغیر “IFS” با خط فاصله “-” تنظیم می شود. سپس، یک رشته “Hello-Geeks” را تکرار می کنیم که با خط فاصله جداکننده فیلد “-” از هم جدا شده است. سپس از دستور read برای تعریف متغیرهای “var1” و “var2” استفاده می کنیم و این متغیرها را به طور جداگانه اکو می کنیم.

IFS=“-“
اکو “سلام گیک ها!” | (خواندن var1 var2; اکو $var1; اکو $var2)

خروجی رشته Hello و رشته “Geeks” را به طور جداگانه بازیابی می کند. از این رو، $IFS جداکننده ها را به صورت جداگانه می پذیرد.

پیشنهاد می‌کنیم بخوانید:  روش جایگزینی آخرین رخداد با استفاده از `sed`

چگونه از $IFS در Bash استفاده کنیم؟چگونه از $IFS در Bash استفاده کنیم؟

مثال 5: تقسیم رشته تعریف شده توسط کاربر در اسکریپت Bash با IFS

ما از عملگر $IFS در اسکریپت قبلی Bash برای نشان دادن عملکرد استفاده کردیم. اکنون، از یک عملگر IFS برای تنظیم جداکننده برای رشته کلماتی که توسط کاربر در terminal. دستور خواندن را با پرچم “-p” می دهیم. این دستور عبارت Enter the string with space را چاپ می کند. سپس رشته وارد شده در متغیر “StringIs” مقداردهی اولیه می شود. عملگر IFs با جداکننده فاصله تنظیم شده است تا رشته ها را تقسیم کند.

در مرحله بعد، دستور “read -ra ADDR” را داریم که “$StrinIS” را به عنوان آرایه ای از توکن ها می خواند که توسط IFS تقسیم می شوند. گزینه “-r” مشخص می کند که اسلش “\” یک کاراکتر فرار نیست، بلکه یک کاراکتر است. گزینه “-a” مشخص می کند که کلمات با $IFS اختصاص داده شده به شاخص ترتیبی آرایه که از صفر شروع می شود از هم جدا شوند. پس از آن، با عبور از حلقه foreach به عناصر رشته ای آرایه دسترسی پیدا می کنیم.

#!/صندوقچه/bash

خواندن “رشته را با فاصله وارد کنید:” StringIS
IFS=“”
خواندن -ra ADDR <<<$StringIS
برای من که در ${ADDR[@]};
انجام دادن
اکو $i
انجام شده

رشته ای که توسط کاربر وارد می شود شامل فضاهای خالی است که اجرای آن به صورت زیر به دست می آید:

چگونه از $IFS در Bash استفاده کنیم؟چگونه از $IFS در Bash استفاده کنیم؟

نتیجه

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

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-29 14:58:02

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید