Ένας οδηγός για πίνακες Bash

Σε αυτόν τον οδηγό για τους πίνακες Bash, θα μάθετε πώς να δηλώνετε και να εργάζεστε με ευρετηριασμένους και συσχετιστικούς πίνακες στο Bash.

Στο Bash, μπορείτε να δημιουργήσετε πίνακες για να αποθηκεύσετε μια συλλογή στοιχείων. Οι πίνακες Bash είναι μονοδιάστατες συλλογές. Σε γλώσσες προγραμματισμού όπως η C και η C++, οι πίνακες είναι συλλογές στοιχείων του ίδιου τύπου δεδομένων. Ωστόσο, στο Bash, ανάλογα με την περίπτωση χρήσης, μπορείτε να αποθηκεύσετε ακέραιους αριθμούς και συμβολοσειρές στον ίδιο πίνακα.

Σε αυτό το σεμινάριο, θα μάθετε πώς να δηλώνετε έναν πίνακα Bash και να έχετε πρόσβαση στα στοιχεία του. Στη συνέχεια, θα μάθετε πώς να κάνετε κύκλο στα στοιχεία ενός πίνακα και να προσθέτετε στοιχεία σε έναν πίνακα. Τέλος, θα μάθετε για τους συσχετιστικούς πίνακες στο Bash.

Ας ξεκινήσουμε!

⚙ Ενδιαφέρεστε να κωδικοποιήσετε μαζί; Εδώ είναι τα προαπαιτούμενα:

Πώς να δηλώσετε έναν πίνακα Bash

Σε αυτήν την ενότητα, θα μάθετε τη σύνταξη για να δηλώσετε έναν πίνακα Bash και παραδείγματα κώδικα.

Σύνταξη δήλωσης πίνακα Bash

Μπορείτε να δηλώσετε έναν πίνακα στο 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=(24 27 18 30 15)

Όπως αναφέρεται στη σύνταξη, οι αριθμοί στον πίνακα τιμών χωρίζονται με ένα κενό διάστημα, που περικλείεται σε παρένθεση, χωρίς κενά πριν και μετά τον τελεστή ανάθεσης =.

  Πώς να δείτε το Ιστορικό ανώνυμης περιήγησης στο iPhone

Στο 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.

Γνωρίζουμε ότι {τιμές[@]} επεκτείνεται σε όλα τα στοιχεία του πίνακα τιμών. Και ${τιμές[@]} μας δίνει τις τιμές όλων των στοιχείων.

  Βελτιστοποιήστε το περιεχόμενο και αντιγράψτε με εργαλεία τεχνητής νοημοσύνης

Ο βρόχος Bash for είναι παρόμοιος με τη σύνταξη βρόχου for της Python, αλλά οι εντολές στο σώμα του βρόχου θα πρέπει να περικλείονται στο do and done, όπως φαίνεται:

$ for price in ${prices[@]}
> do
> echo $price
> done

Επειδή χρησιμοποιούμε την εντολή echo και εκτυπώνουμε την τιμή της μεταβλητής τιμής, έχουμε την ακόλουθη έξοδο:

# 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

Ο πίνακας τιμών περιέχει 5 στοιχεία, οπότε ο δείκτης ξεκινά από το 0 και ανεβαίνει στο 4.

Στη συνέχεια, μπορούμε να κάνουμε βρόχο στη λίστα των ευρετηρίων και να έχουμε πρόσβαση στο στοιχείο σε κάθε ευρετήριο. Για το ευρετήριο i, ${τιμές[i]} είναι το στοιχείο στο ευρετήριο i.

$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done

Ο παραπάνω βρόχος εκτυπώνει όλα τα στοιχεία του πίνακα.

# output
24
27
18
30
15

💬 Εδώ, αφού έχουμε πρόσβαση σε κάθε στοιχείο, εκτελούμε μια απλή λειτουργία εκτύπωσης της αξίας του. Γενικά, μπορούμε να έχουμε οποιαδήποτε έγκυρη επεξεργασία στα στοιχεία.

Προσθήκη στοιχείων σε πίνακα Bash

Στον πίνακα τιμών, έχουμε πέντε στοιχεία (στους δείκτες 0,1,2,3 και 4). Εάν θέλετε να προσθέσετε ένα στοιχείο στο τέλος του πίνακα στο ευρετήριο 5, μπορείτε να το κάνετε ως εξής:

$ prices[5]=21

Βλέπουμε ότι το 21 έχει προστεθεί στο τέλος του πίνακα τιμών.

$ echo ${prices[@]}
24 27 18 30 15 21

Ωστόσο, είναι πιο βολικό να προσαρτήσετε στο τέλος του πίνακα —χωρίς να θυμάστε— το ευρετήριο του τελευταίου στοιχείου που προστέθηκε ή τον αριθμό των στοιχείων που βρίσκονται αυτήν τη στιγμή στον πίνακα.

Μπορείτε να χρησιμοποιήσετε το arrayName+=(στοιχεία(α)) για να προσθέσετε ένα ή περισσότερα στοιχεία σε έναν πίνακα, όπως φαίνεται:

$ prices+=(10)

Τώρα, αν εκτυπώσουμε τον πίνακα τιμών, βλέπουμε ότι το 10 έχει προστεθεί στο τέλος του πίνακα.

$ echo ${prices[@]}
24 27 18 30 15 21 10

Στη συνέχεια, ας μάθουμε πώς να δηλώνουμε συσχετιστικούς πίνακες στο Bash.

  9 Java EE Frameworks για τη δημιουργία εταιρικών εφαρμογών

Συνειρμικοί πίνακες στο 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.