آرایه ها می توانند بسیاری از کارها را ساده کنند، به خصوص زمانی که نیاز به تکرار یک عمل در چندین فایل دارید. نحوه استفاده از آنها را در اسکریپت های bash خود بیابید.
مانند بسیاری از زبان های برنامه نویسی، اسکریپت های bash گاهی اوقات نیاز به فهرستی از مقادیر مرتبط دارند. ساده ترین شکل آرایه استاندارد است.
در bash، برنامه نویسی آرایه کاملاً متفاوت است، به ویژه در مورد نحو. آرایه های Bash نیز کاملاً یک بعدی هستند، اما هنوز کاربردهای زیادی دارند.
نحو اساسی آرایه های Bash
ایجاد یک آرایه در bash ساده است. می توانید کل آرایه را با استفاده از براکت ها مقداردهی اولیه کنید، به عنوان مثال:
city=(London Paris Milan "New York")
(شما می توانید تمام کدهای این نمونه شهر را در این GitHub Gist بیابید.)
این یک آرایه حاوی چهار عنصر ایجاد می کند که از 0 تا 3 نمایه شده است. توجه داشته باشید که مقدار چهارم یک رشته نقل قول است که از دو کلمه تشکیل شده است. شما باید مقادیر حاوی فاصله را نقل قول کنید تا مشخص شود که مقادیر مجزا نیستند.
شما می توانید با استفاده از نحو براکت که در زبان های برنامه نویسی رایج است به یک عنصر دسترسی داشته باشید:
city[2]
از آنجایی که این bash است، برای استفاده از مقدار در یک عبارت، به چند اصلاح نیاز دارید:
- شما باید علامت دلار ($) را به نام متغیر اضافه کنید.
- همچنین باید از پرانتز ({}) استفاده کنید تا نام متغیر بدون ابهام باشد. بهطور پیشفرض، bash $city[2] را بهعنوان متغیری با نام شهر در نظر میگیرد. براکت ها را اضافه کنید تا به bash بگویید تا براکت ها و شماره شاخص را نیز ارزیابی کند.
دستور استاندارد دسترسی به آرایه bash به این صورت است:
${variable_name[index]}
این یک مثال کامل است:
#!/bin/bash
city=(London Paris Milan "New York")
echo ${city[3]}
# New York
به جای اینکه یک آرایه را به یکباره مقداردهی اولیه کنید، می توانید گام به گام به آن اختصاص دهید. این اسکریپت معادل طولانی تری از مثال قبلی است:
#!/bin/bash
city[0]=London
city[1]=Paris
city[2]=Milan
city[3]="New York"
echo ${city[3]}
# New York
توجه داشته باشید که در هر صورت، باید مراقب باشید که هیچ فاصله ای در اطراف علامت تساوی اضافه نکنید. “city[0] = London”، با فاصله های اطراف علامت تساوی، یک خطا ایجاد می کند.
کاربردهای بیشتر برای آرایه های Bash
آرایه ها برای ذخیره داده های مرتبط عالی هستند. در اینجا یک پوسته اسکریپت (بسیار محدود) برای بدست آوردن جذر یک عدد وجود دارد:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
echo ${sqrt[$1]}
توجه داشته باشید که اسکریپت از مقدار $1 به عنوان شاخص آرایه استفاده می کند. $1 نشان دهنده اولین آرگومان خط فرمان است که اسکریپت دریافت می کند، بنابراین می توانید این اسکریپت را به این صورت اجرا کنید:
$ ./sqrt.sh 9
3
ممکن است از دستور $(cmd) برای اجرای یک دستور و ذخیره خروجی آن در یک متغیر آگاه باشید. میتوانید این را با دستور اولیه آرایه ترکیب کنید تا آرایهای از فایلها را برای کار با آنها بدست آورید:
arr=( $(ls) )
یک آرایه اغلب یک ساختار داده کامل برای تکرار است و Bash نیز از این قاعده مستثنی نیست. می توانید از طریق یک آرایه حلقه بزنید تا هر عنصر را چاپ کنید یا عملیاتی را روی هر عضو انجام دهید.
شما می توانید یک آرایه را در یک برای .. در حلقه آدرس دهی کنید تا روی محتویات آن تکرار شود. به عنوان مثال، در اینجا یک حلقه ساده وجود دارد که تعداد خطوط هر فایل را در آرایه آرایه چاپ می کند:
for file in "${arr[@]}"; do
wc -l "$file"
done
# 3 envvars
# 547 httpd.conf
# ...
توجه داشته باشید که این الگو از نماد @ برای بازیابی همه عناصر از آرایه استفاده می کند.
نحو آرایه Bash بیشتر
با استفاده از موارد زیر می توانید تعداد آیتم های یک آرایه را بدست آورید:
echo ${#city[@]}
# 4
می توانید یک عنصر جدید را به انتهای یک آرایه استاندارد اضافه کنید مانند:
arr+=(4)
بنابراین برای اضافه کردن شهر پنجم به لیست:
city+=(Rome)
echo ${city[@]}
# London Paris Milan New York Rome
برای استخراج تکه ای از یک آرایه، می توانید از نحوی استفاده کنید که عملکرد برش بسیاری از زبان های دیگر را تقریب می کند:
${arr[@]:s:n}
این نحو، برشی از آرایه را برمیگرداند که از موقعیت s شروع شده و حاوی n مورد است. برای استخراج همه موارد از s تا انتهای لیست می توانید قسمت :n را حذف کنید.
echo ${city[@]:2:2}
# Milan New York
echo ${city[@]:3}
# New York Rome
Bash دارای ویژگی های بسیاری است، آنها فقط کمی یادگیری دارند
آرایههای موجود در bash ممکن است محدودیتهایی داشته باشند، اما همان عملکرد اولیه را ارائه میدهند که اکثر زبانهای برنامهنویسی انجام میدهند. اگرچه bash از لحاظ تاریخی از آرایههای تک بعدی ساده پشتیبانی میکند، زمان در حال تغییر است. آخرین نسخه bash، 4، از آرایه های انجمنی و نمایه سازی آرایه منفی پشتیبانی می کند.
از هر نسخه ای از bash که استفاده می کنید، مهم است که تفاوت های ظریف آن را درک کنید. حتی نحو متغییر معمولی نیز دارای ویژگیهای خاص است.