دليل إلى Bash Arrays
نشرت: 2022-12-30في هذا الدليل الخاص بمصفوفات Bash ، ستتعلم كيفية التصريح عن المصفوفات المفهرسة والرابطية والعمل معها في Bash.
في Bash ، يمكنك إنشاء مصفوفات لتخزين مجموعة من العناصر. مصفوفات Bash هي مجموعات أحادية البعد . في لغات البرمجة مثل C و C ++ ، المصفوفات عبارة عن مجموعات من العناصر من نفس نوع البيانات. ومع ذلك ، في Bash ، بناءً على حالة الاستخدام ، يمكنك تخزين الأعداد الصحيحة والسلاسل في نفس المصفوفة.
في هذا البرنامج التعليمي ، ستتعلم كيفية التصريح عن مصفوفة Bash والوصول إلى عناصرها. ستتعلم بعد ذلك كيفية إجراء حلقة عبر عناصر مصفوفة وإلحاق عناصر بمصفوفة. أخيرًا ، ستتعرف على المصفوفات الترابطية في Bash.
هيا نبدأ!
مهتم في الترميز على طول؟ فيما يلي المتطلبات الأساسية:
- إذا كنت تستخدم جهاز Mac أو Linux ، فيمكنك فتح الجهاز الطرفي والرمز.
- إذا كنت تستخدم جهاز يعمل بنظام Windows ، فالرجاء تثبيت Git Bash أو نظام Windows الفرعي لنظام Linux (WSL2).
كيفية التصريح عن صفيف باش
في هذا القسم ، ستتعلم بناء الجملة للإعلان عن مصفوفة Bash وأمثلة للتعليمات البرمجية.
بناء جملة إعلان Bash Array
يمكنك التصريح عن مصفوفة في Bash باستخدام الصيغة التالية:
$ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array
في الصيغة أعلاه ، يشير arrayName
إلى اسم المصفوفة التي تحتوي على عناصر N
elt1...eltN
.
يتم وضع عناصر المصفوفة بين قوسي الفتح والإغلاق ()
. لاحظ أيضًا أن عناصر المصفوفة مفصولة بمسافة بيضاء . كما هو الحال مع أي متغير Bash ، يجب ألا تكون هناك مسافة بيضاء قبل أو بعد عامل الإسناد =
.
في معظم لغات البرمجة الأخرى ، ستفصل عناصر المصفوفة أو المجموعات المماثلة بفاصلات. لكن في Bash ، المسافة البيضاء هي الفاصل.
في Bash ، يشار إلى مثل هذه المصفوفات التي يتم فيها تحديد العناصر بواسطة فهرسها على أنها مصفوفة مفهرسة .
التصريح عن المصفوفات المفهرسة في Bash
لنقم بإنشاء prices
، مجموعة من الأرقام.
$ prices=(24 27 18 30 15)
كما هو مذكور في بناء الجملة ، يتم فصل الأرقام في مصفوفة
prices
بمسافة بيضاء ، محاطة بأقواس ، بدون مسافات قبل وبعد عامل التعيين =.
في Bash ، يمكنك استخدام الأمر echo
لطباعة قيمة متغير. يؤدي استخدام $variableName
إلى طباعة قيمة variableName
. ومع ذلك ، يمكنك أن ترى أن استخدام اسم المصفوفة يطبع العنصر الأول فقط.
$ echo $prices 24
مصفوفات Bash تتبع الفهرسة الصفرية. إذن ، العنصر الأول عند الفهرس 0 ، والعنصر الثاني عند الفهرس 1 ، وهكذا. يمكنك أيضًا استخدام الفهرسة السلبية ؛ فهرس عنصر الصفيف الأخير هو -1.
ماذا يحدث إذا حاولت الوصول إلى العنصر في فهرس معين وقمت بطباعته؟ دعنا نحاول طباعة العنصر في الفهرس 1.
$ echo $prices[1] 24[1]
لماذا هو الناتج 24 [1]؟ هذا لأن Bash تستبدل $prices
بـ 24 ، وهو العنصر الأول في المصفوفة ويتم طباعة [1] على هذا النحو.
لطباعة العنصر في فهرس معين ، يمكنك استخدام توسيع المعلمة للنموذج ${prices[index]}
.
$ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18
لطباعة جميع العناصر في المصفوفة ، يمكنك تحديد @
بدلاً من فهرس معين.
$ echo ${prices[@]} 24 27 18 30 15
بعد ذلك ، دعنا ننشئ مجموعة من السلاسل. يؤدي تشغيل الأمر التالي إلى إنشاء مصفوفة مفهرسة:
$ declare -a fruits
يقوم الخيار -a
بإنشاء مصفوفة مفهرسة. يمكنك الآن ملء المصفوفة ، عنصرًا واحدًا في كل مرة ، عن طريق إعلان العنصر في فهرس معين ، كما هو موضح أدناه:
$ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange"
الآن ، لطباعة جميع عناصر المصفوفة ، يمكنك استخدام ${fruits[@]}
.
$ echo ${fruits[@]} cherry berry apple pear melon orange
قم بالوصول إلى عناصر صفيف Bash
يمكنك الوصول إلى عناصر المصفوفة بالطرق التالية:
- قم بالتكرار خلال المصفوفة والوصول إلى العنصر مباشرةً
- قم بالتكرار خلال مجموعة الفهارس وعناصر الوصول إلى فهرس معين
حلقة من خلال المصفوفة وعناصر الوصول
إذا قمت بالتشفير في Python ، فستستخدم حلقة for باستخدام الصيغة التالية:
for elt in some_list: print(elt)
الآن دعونا نكتب Bash المكافئ لحلقة for أعلاه.
نحن نعلم أن {prices[@]}
تتوسع لتشمل جميع العناصر في مصفوفة prices
. ويعطينا ${prices[@]}
قيم جميع العناصر.
تتشابه Bash for loop مع صيغة حلقة for في بايثون ، لكن العبارات الموجودة في جسم الحلقة يجب أن تُحاط بـ do
and done
، كما هو موضح:
$ for price in ${prices[@]} > do > echo $price > done
لأننا نستخدم أمر echo ونطبع قيمة price
المتغير ، نحصل على المخرجات التالية:
# output 24 27 18 30 15
قم بالوصول إلى العناصر باستخدام فهرس المصفوفة
طريقة أخرى للتكرار خلال المصفوفات هي استخدام فهرس العناصر. يشبه هذا بناء الحلقة for في Python الذي يستخدم الدالة range()
:
for i in range(len(some_list)): print(i)
للحصول على قائمة من الفهارس للتكرار ، يمكنك وضع علامة تعجب ( !
) قبل اسم الصفيف في توسيع المعلمة. سيعطيك هذا قائمة بجميع الفهارس الصالحة للمصفوفة ، كما هو موضح:
$ echo ${!prices[@]} 0 1 2 3 4
تحتوي مصفوفة prices
على 5 عناصر ، لذا يبدأ المؤشر من 0 ويصعد إلى 4.
بعد ذلك ، يمكننا المرور عبر قائمة الفهارس والوصول إلى العنصر في كل فهرس. بالنسبة للفهرس i
، فإن ${prices[i]}
هو العنصر في الفهرس i
.
$ for i in ${!prices[@]} > do > echo ${prices[i]} > done
الحلقة أعلاه تطبع كل العناصر في المصفوفة.
# output 24 27 18 30 15
هنا ، بعد الوصول إلى كل عنصر ، نقوم بعملية بسيطة لطباعة قيمته. بشكل عام ، يمكن أن يكون لدينا أي معالجة صالحة للعناصر.
إلحاق العناصر بصفيف Bash
في مصفوفة prices
، لدينا خمسة عناصر (في الفهارس 0 و 1 و 2 و 3 و 4). إذا كنت تريد إضافة عنصر إلى نهاية المصفوفة في الفهرس 5 ، فيمكنك القيام بذلك على النحو التالي:
$ prices[5]=21
نرى أنه تم إلحاق 21 في نهاية مجموعة الأسعار.
$ echo ${prices[@]} 24 27 18 30 15 21
ومع ذلك ، فمن الأنسب إلحاق نهاية المصفوفة - دون تذكر - فهرس آخر عنصر مضاف أو عدد العناصر الموجودة حاليًا في المصفوفة.
يمكنك استخدام arrayName+=(elements(s))
لإلحاق عنصر واحد أو أكثر بمصفوفة ، كما هو موضح:
$ prices+=(10)
الآن ، إذا قمنا بطباعة مصفوفة prices
، فسنلاحظ أنه تم إلحاق 10 بنهاية المصفوفة.
$ echo ${prices[@]} 24 27 18 30 15 21 10
بعد ذلك ، دعنا نتعلم كيفية التصريح عن المصفوفات الترابطية في Bash.
المصفوفات النقابية في باش
إذا كنت تريد تحديد علاقة من حيث أزواج المفتاح والقيمة ، فيمكنك استخدام مصفوفة ترابطية . يمكنك التصريح عن مصفوفة ترابطية باستخدام الصيغة العامة التالية. لاحظ أننا نستخدم الخيار -A
بدلاً من -a
.
$ declare -A fruits_prices
يمكنك إضافة عناصر إلى المصفوفة الترابطية عن طريق تحديد المفتاح والقيمة المقابلة. هنا ، أضفنا أسماء الثمار كمفاتيح والأرقام من مصفوفة الأسعار كقيم.
$ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21
إذن كيف نصل إلى العناصر في مصفوفة ترابطية؟
الطريقة التي تبحث بها عن القيمة باستخدام المفتاح المقابل في قاموس Python ، يمكنك الوصول إلى القيم في مصفوفة ترابطية باستخدام المفاتيح.
$ echo ${fruits_prices[berry]} # 27
نلاحظ أن ${fruits_prices[@]}
يتوسع إلى القيم وأن ${!fruits_prices[@]}
يتوسع إلى المفاتيح.
$ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melon
ملاحظة : ترتيب العناصر ليس هو نفسه الترتيب الذي أضفناها به. هذا لأنه ، على عكس المصفوفات المفهرسة ، لا تعتبر المصفوفات الترابطية مجموعات مرتبة. بدلاً من ذلك ، يعملون على الارتباط بين المفاتيح والقيم. لذلك ، فإن المفاتيح هي للمصفوفات الترابطية ما هي الفهارس للمصفوفات المفهرسة.
يمكنك أيضًا المرور عبر المصفوفة الترابطية والوصول إلى المفاتيح ، كما هو موضح:
$ for key in ${!fruits_prices[@]} > do > echo $key > done
# Output apple berry orange cherry pear melon
توضح الحلقة التالية كيف يمكنك الوصول إلى القيم.
$ for value in ${fruits_prices[@]} > do > echo $value > done
# Output 18 27 21 24 30 15
على الرغم من أنه يوصى باستخدام arrayName[key]=value
، إلا أنه يمكنك أيضًا إعلانها كتسلسل مثل هذا:
declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)
بهذه الطريقة ، يستدل Bash على العنصر الأول باعتباره المفتاح الأول ، والعنصر الثاني كالقيمة الأولى ، وهكذا.
تلخيص لما سبق
أتمنى أن تفهم الآن كيفية إنشاء مصفوفات Bash والعمل معها. إليك مراجعة سريعة لما تعلمته.
- يمكنك إعلان مصفوفة مفهرسة في Bash باستخدام بناء الجملة
arrayName=(elt1 elt2 elt3 ... eltN)
أو تشغيلdeclare -a arrayName
وإضافة عناصر إلى المصفوفة. - للوصول إلى العناصر ، يمكنك إجراء حلقة باستخدام
${arrayName[@]}
. بدلاً من ذلك ، يمكنك الحصول على قائمة بجميع الفهارس الصالحة باستخدام توسيع المعلمة${!arrayName[@]}
. - أخيرًا ، تعلمت أيضًا كيفية الإعلان عن مصفوفة ترابطية لتخزين أزواج القيمة الرئيسية في Bash.
بعد ذلك ، تحقق من البرنامج التعليمي للحلقات في Bash.