כמו רוב שפות התכנות, סקריפטים של bash צריכים לפעמים להתמודד עם רשימה של ערכים קשורים. הצורה הפשוטה ביותר היא המערך הסטנדרטי.

ב-bash, תכנות מערך שונה לגמרי, במיוחד כשמדובר בתחביר. מערכי Bash הם גם חד-ממדיים בהחלט, אבל עדיין יש להם הרבה שימושים.

התחביר הבסיסי של מערכי Bash

יצירת מערך ב-bash היא פשוטה. אתה יכול לאתחל מערך שלם באמצעות סוגריים, לדוגמה:

city=(לונדון פריז מילאנו "ניו יורק")

(תוכל למצוא את כל הקוד מדוגמה של עיר זו ב GitHub זה.)

זה יוצר מערך המכיל ארבעה אלמנטים, באינדקס מ-0 עד 3. שימו לב שהערך הרביעי הוא מחרוזת במירכאות המורכבת משתי מילים. יהיה עליך לצטט ערכים המכילים רווחים כדי להבהיר שהם אינם ערכים נפרדים.

אתה יכול לגשת לאלמנט בודד באמצעות תחביר הסוגר המשותף בשפות התכנות:

עיר[2]

מכיוון שזה bash, תזדקק לכמה חידודים כדי להשתמש בערך בביטוי:

  • תצטרך להציב את סימן הדולר ($) לשם המשתנה.
  • תצטרך גם להשתמש בפלטה ({}) כדי להפוך את שם המשתנה חד משמעי. כברירת מחדל, bash יטפל $city[2] בתור משתנה בשם עִיר. הוסף פלטה כדי לומר ל-bash להעריך גם את הסוגריים ואת מספר האינדקס.

תחביר הגישה הסטנדרטי למערך bash הוא אז:

instagram viewer
${variable_name[index]}

הנה דוגמה מלאה:

#!/bin/bash

city=(לונדון פריז מילאנו "ניו יורק")
echo ${city[3]}

# ניו יורק

במקום לאתחל מערך בבת אחת, אתה יכול להקצות לו שלב אחר שלב. סקריפט זה הוא מקבילה ארוכה יותר של הדוגמה הקודמת:

#!/bin/bash

city[0]=לונדון
עיר[1]=פריז
עיר[2]=מילאנו
city[3]="ניו יורק"
echo ${city[3]}

# ניו יורק

שים לב שבכל מקרה, עליך להיזהר לא להוסיף רווח סביב סימן השווה. "עיר[0] = לונדון", עם רווחים מסביב לסימן השוויון, ייצור שגיאה.

שימושים נוספים עבור מערכי 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) )

מערך הוא לעתים קרובות מבנה נתונים מושלם לאיטרציה ובאש אינו יוצא מן הכלל. אתה יכול לעבור דרך מערך כדי להדפיס כל רכיב או לבצע פעולה על כל איבר.

אתה יכול לפנות למערך ב א ל.. ב לוּלָאָה, כדי לחזור על תוכנו. לדוגמה, הנה לולאה פשוטה שמדפיסה את מספר השורות בכל קובץ במערך arr:

עבור קובץ ב-"${arr[@]}"; לַעֲשׂוֹת
wc -l "$file"
בוצע

# 3 envvars
# 547 httpd.conf
# ...

שימו לב שתבנית זו עושה שימוש ב- @ סמל כדי לאחזר את כל האלמנטים מהמערך.

עוד תחביר מערך Bash

אתה יכול לקבל את מספר הפריטים במערך באמצעות הפריטים הבאים:

echo ${#city[@]}

# 4

אתה יכול להוסיף אלמנט חדש לקצה של מערך סטנדרטי כך:

arr+=(4)

אז כדי להוסיף עיר חמישית לרשימה:

עיר+=(רומא)
echo ${city[@]}

# לונדון פריז מילאנו ניו יורק רומא

כדי לחלץ חלק ממערך, אתה יכול להשתמש בתחביר שמקרוב את פעולת הפרוסה של שפות רבות אחרות:

${arr[@]:s: n}

תחביר זה יחזיר חלק מהמערך שמתחיל במיקום ס ומכיל נ פריטים. אתה יכול להשמיט את חלק לחלץ ממנו את כל הפריטים ס עד סוף הרשימה.

echo ${city[@]:2:2}
# מילאנו ניו יורק

echo ${city[@]:3}
# ניו יורק רומא

ל-Bash יש הרבה תכונות, הם פשוט לוקחים קצת למידה

למערכים ב-bash אולי יש מגבלות, אבל הם מציעים את אותה פונקציונליות בסיסית כמו רוב שפות התכנות. למרות ש-bash תמך היסטורית במערכים חד-ממדיים פשוטים, הזמנים משתנים. הגרסה האחרונה של bash, 4, תומכת במערכים אסוציאטיביים ובאינדקס של מערכים שליליים.

לא משנה באיזו גרסה של bash אתה משתמש, חשוב להבין את הניואנסים שלה. אפילו לתחביר משתנה רגיל יש הרבה אידיוסינקרטיות.

הסבר על משתני Bash: מדריך פשוט עם דוגמאות

קרא הבא

לַחֲלוֹקצִיוּץלַחֲלוֹקאימייל

נושאים קשורים

  • תִכנוּת
  • לינוקס
  • תִכנוּת
  • Linux Bash Shell
  • תסריט

על הסופר

בובי ג'ק (71 מאמרים שפורסמו)

בובי הוא חובב טכנולוגיה שעבד כמפתח תוכנה במשך רוב שני עשורים. ב-MUO, הוא העורך הזוטר למדור התכנות. הוא נלהב ממשחקים, עובד כעורך ראשי במגזין Switch Player, והוא שקוע בכל ההיבטים של פרסום מקוון ופיתוח אתרים.

עוד מבובי ג'ק

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחץ כאן כדי להירשם