دستور readarray در لینوکس
در این بخش به بررسی دستور readarray در لینوکس می پردازیم، لینوکس یکی از محبوبترین سیستمعاملهای متنباز است که به دلیل تنوع و گستردگی ابزارها و دستورات، بسیار پرکاربرد میباشد. یکی از این دستورات که ممکن است برای کاربران لینوکس و به خصوص کسانی که در زمینه اسکریپتنویسی با Bash فعالیت میکنند، مفید واقع شود، دستور readarray است. این دستور از اهمیت ویژهای برخوردار است چرا که برای خواندن و مدیریت لیستهای چندسطری به کار میرود. در اسکریپتنویسی، مدیریت دادهها در قالب آرایهها یکی از نیازهای مهم به شمار میرود و دستور readarray امکان کار با این نوع دادهها را به سادهترین شکل ممکن فراهم میکند.
در این مقاله، قصد داریم تا دستور readarray را به طور جامع بررسی کنیم. از نحوه عملکرد و کاربردهای آن تا مثالهای عملی که درک بهتری از آن ارائه میدهند. هدف از این مقاله، آموزش کامل و کاربردی استفاده از این دستور در محیط لینوکس است، تا بتوانید در موارد مختلف، از آن بهرهبرداری کنید. دستور readarray یکی از ابزارهای مفید در مدیریت فایلها و دادهها در Bash محسوب میشود و میتواند عملیاتهای مختلفی همچون خواندن خطوط فایلها و ذخیره آنها در آرایهها را انجام دهد.
۱. مفهوم readarray و کاربردهای آن
دستور readarray یا mapfile در لینوکس، دستوری است که برای خواندن دادهها از ورودی استاندارد (stdin) یا فایل و ذخیره آنها به صورت یک آرایه مورد استفاده قرار میگیرد. این دستور در Bash مورد استفاده قرار میگیرد و به کاربران اجازه میدهد که خطوط یک فایل متنی یا خروجی یک دستور دیگر را به صورت مستقیم به یک آرایه انتقال دهند. این ویژگی برای اسکریپتنویسی Bash بسیار کاربردی است، چرا که به کمک آن میتوان به راحتی با دادهها کار کرد و عملیاتهایی مثل پیمایش، جستجو و ویرایش را روی آرایهها انجام داد.
به طور کلی readarray میتواند زمانی کاربرد داشته باشد که شما بخواهید محتوای یک فایل یا خروجی یک دستور را به صورت خط به خط خوانده و با آن کار کنید. در واقع، هر خط از فایل یا خروجی به عنوان یک عنصر در آرایه ذخیره میشود و شما میتوانید از طریق ایندکسگذاری به آنها دسترسی پیدا کنید.
مثال ابتدایی
برای آشنایی اولیه با readarray، فرض کنید میخواهیم محتوای یک فایل متنی را بخوانیم و هر خط آن را در یک عنصر از آرایه ذخیره کنیم:
readarray my_array < myfile.txtدر این مثال، محتوای فایل myfile.txt به صورت خط به خط خوانده شده و در آرایه my_array ذخیره میشود. حالا میتوانیم با استفاده از حلقهها یا دستورات دیگر روی این آرایه عملیات انجام دهیم.
۲. تفاوت readarray و read
قبل از پرداختن به جزئیات بیشتر دستور readarray، شاید این سؤال برایتان پیش بیاید که تفاوت بین readarray و دستور read در چیست؟ هر دو دستور برای خواندن دادهها به کار میروند، اما کاربرد و عملکرد آنها متفاوت است.
- دستور
readبرای خواندن یک خط از ورودی و ذخیره آن در یک متغیر یا آرایه استفاده میشود. با این حال، این دستور تنها یک خط از دادهها را در هر بار اجرا میخواند. اگر بخواهید تمام خطوط یک فایل را بخوانید، باید از یک حلقه استفاده کنید. - در مقابل،
readarrayبه طور همزمان تمام خطوط ورودی را خوانده و به صورت یک آرایه در حافظه ذخیره میکند. به این ترتیب، نیازی به استفاده از حلقهها برای خواندن تک تک خطوط نیست.
مثال با استفاده از دستور read
while IFS= read -r line; do
echo "$line"
done < myfile.txtدر این مثال، هر خط از فایل به صورت جداگانه با read خوانده شده و سپس نمایش داده میشود. این کار با استفاده از حلقه while انجام میگیرد، که خط به خط فایل را پیمایش میکند. در مقابل، همان نتیجه را میتوان با readarray بدون نیاز به حلقه به دست آورد:
readarray my_array < myfile.txt
for line in "${my_array[@]}"; do
echo "$line"
doneاین روش، بسیار کارآمدتر و سادهتر است چرا که کل فایل به یکباره در آرایه ذخیره میشود و سپس میتوان به راحتی با آن کار کرد.
۳. گزینهها و پارامترهای دستور readarray
دستور readarray دارای چندین پارامتر و گزینه است که به شما امکان میدهند کنترل بیشتری روی نحوه خواندن دادهها داشته باشید. در ادامه به معرفی برخی از مهمترین پارامترها و نحوه استفاده از آنها میپردازیم.
-t (حذف کاراکتر newline)
به صورت پیشفرض، دستور readarray هر خط از فایل را همراه با کاراکتر newline ذخیره میکند. اگر بخواهید این کاراکتر را از انتهای هر خط حذف کنید، میتوانید از گزینه -t استفاده کنید.
readarray -t my_array < myfile.txtدر این حالت، خطوط فایل بدون کاراکتر newline در آرایه ذخیره خواهند شد.
-n (تعداد خطوط)
گزینه -n به شما این امکان را میدهد که تعداد خطوطی که میخواهید خوانده شوند را مشخص کنید. برای مثال، اگر بخواهید تنها ۵ خط اول یک فایل را بخوانید، میتوانید از این گزینه استفاده کنید:
readarray -n 5 my_array < myfile.txt-d (مشخص کردن جداکننده)
به صورت پیشفرض، readarray از newline به عنوان جداکننده خطوط استفاده میکند، اما اگر بخواهید جداکننده دیگری تعیین کنید، میتوانید از گزینه -d استفاده کنید. برای مثال، اگر دادههای شما با کاما جدا شده باشند، میتوانید دستور زیر را اجرا کنید:
readarray -d ',' my_array < data.txt-O (تعیین ایندکس شروع)
این گزینه به شما اجازه میدهد که مشخص کنید آرایه از کدام ایندکس شروع به ذخیرهسازی کند. به طور پیشفرض ایندکس از ۰ شروع میشود، اما با استفاده از -O میتوانید ایندکس دیگری را تعیین کنید:
readarray -O 3 my_array < myfile.txtدر این مثال، دادهها از ایندکس ۳ در آرایه ذخیره میشوند و ایندکسهای ۰ تا ۲ خالی خواهند ماند.
۴. کاربردهای عملی readarray
۵. نکات مهم در استفاده از readarray
در هنگام استفاده از readarray باید به چند نکته کلیدی توجه کرد:
- حجم فایلها: اگر فایلی که میخواهید بخوانید بسیار بزرگ باشد، ممکن است کل محتوای آن به صورت یکباره در حافظه سیستم بارگذاری شود و این امر میتواند باعث کاهش کارایی سیستم شود. در چنین شرایطی، بهتر است از روشهایی مثل
readبه همراه حلقه استفاده کنید. - سازگاری نسخه Bash: دستور
readarrayدر نسخههای جدیدتر Bash (نسخه ۴ و بالاتر) معرفی شده است. بنابراین، اگر با نسخههای قدیمیتر Bash کار میکنید، ممکن است این دستور در دسترس نباشد و نیاز به استفاده از روشهای جایگزین باشد. - مدیریت خطاها: همیشه بهتر است در هنگام استفاده از دستورات Bash، خروجیها و خطاهای احتمالی را مدیریت کنید تا در صورت بروز مشکل، بتوانید به سرعت دلیل آن را پیدا کرده و رفع کنید.
دستور readarray یکی از دستورات کاربردی در محیط لینوکس و اسکریپتنویسی Bash است که امکان خواندن و پردازش دادهها به صورت آرایهای را فراهم میکند. این دستور به خصوص در مواردی که نیاز به خواندن و مدیریت چندین خط از یک فایل یا خروجی یک دستور وجود دارد، بسیار مفید است. در این مقاله، به بررسی جزئیات این دستور، تفاوتهای آن با read و همچنین کاربردها و مثالهای عملی آن پرداختیم. امیدواریم این محتوا به شما کمک کند تا از این ابزار به صورت مؤثرتر در اسکریپتنویسیهای خود بهره ببرید.
منابع:
- Bash Reference Manual
- Linux Man Pages
آیا این مطلب برای شما مفید بود ؟



