Εξοικειωθείτε με τους πίνακες Bash—πώς να τους δηλώσετε, να τους χειριστείτε και να τους διαγράψετε.
Οι πίνακες είναι αποθήκες δεδομένων που χρησιμοποιούνται για τη διατήρηση τιμών που έχουν κάποια σχέση μεταξύ τους. Σε αντίθεση με τις περισσότερες γλώσσες προγραμματισμού, οι πίνακες Bash μπορούν να αποθηκεύουν τιμές διαφορετικών τύπων δεδομένων στον ίδιο πίνακα.
Το Bash έχει δύο τύπους πινάκων: πίνακες με ευρετήριο και συσχετιστικούς πίνακες. Για πίνακες με ευρετήριο, τα ευρετήρια ξεκινούν από το 0 έως το (n-1), όπως συνηθίζεται στις περισσότερες γλώσσες. Ωστόσο, οι πίνακες στο Bash είναι αραιοί. Αυτό σημαίνει ότι μπορείτε να αντιστοιχίσετε το (n-1)ο στοιχείο πίνακα χωρίς να έχετε εκχωρήσει το (n-2)ο στοιχείο.
Σε αυτό το σεμινάριο, θα μάθετε πώς να εργάζεστε με πίνακες στο Bash. Ας αρχίσουμε.
Καθορισμός πινάκων
Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να ορίσετε πίνακες στο Bash. Παρόμοια με τις μεταβλητές Bash, οι πίνακες πρέπει να αρχικοποιηθούν κατά τη δημιουργία. Η μόνη εξαίρεση σε αυτό είναι εάν χρησιμοποιείτε το
δηλώνω λέξη-κλειδί. Πρέπει επίσης να βεβαιωθείτε ότι δεν υπάρχει χώρος σε καμία από τις πλευρές του τελεστή εκχώρησης καθώς αρχικοποιείτε τον πίνακα.Η πρώτη μέθοδος είναι η σύνθετη εκχώρηση τιμών στο όνομα του πίνακα. Υπάρχουν δύο τρόποι για να γίνει αυτό:
arr1 = (3 5 6 7)
# or this
arr2 = ([3]=5 [1]=8 [0]=7)
Στην πρώτη σύνθετη ανάθεση, οι τιμές στις στρογγυλές αγκύλες εκχωρούνται διαδοχικά από το ευρετήριο [0] προς την [3].
Ωστόσο, στο δεύτερο, οι τιμές αντιστοιχίζονται σε ένα ευρετήριο με οποιαδήποτε σειρά έχει υποδείξει ο προγραμματιστής.
Σχετίζεται με: Τι είναι οι μεταβλητές περιβάλλοντος στο Linux; Όλα όσα πρέπει να γνωρίζετε
Εάν προσέξατε προσεκτικά arr2, θα παρατηρήσετε αυτόν τον δείκτη [2] έμεινε εκτός. Ο πίνακας θα συνεχίσει να δημιουργείται χωρίς να σημειωθούν σφάλματα. Αυτή η ανάθεση είναι στην πραγματικότητα μια επίδειξη αραιής αποθήκευσης σε πίνακες Bash, όπως αναφέραμε νωρίτερα.
Παρατηρήστε ότι δεν υπάρχουν κόμματα που να χωρίζουν τις τιμές του πίνακα. Οι τιμές διαχωρίζονται απλώς με κενά.
Η δεύτερη μέθοδος δηλώνει έμμεσα τον πίνακα. Μπορείτε απλώς να αρχίσετε να εκχωρείτε τιμές σε μηδενικά στοιχεία πίνακα:
arr3[0]=Toyota
arr3[1]=Honda
arr3[2]=Mercedes
Ο τρίτος τρόπος είναι να δηλώσετε ρητά τον πίνακα με τη λέξη-κλειδί δηλώνω:
declare -a arrayName
Λειτουργίες σε Πίνακες
Για πρόσβαση σε στοιχεία πίνακα, χρησιμοποιήστε αυτήν τη σύνταξη: ${array[index]}
fruits=(mango banana apples)
echo${fruits[1]}# output is banana
Αν πρέπει να εκτυπώσετε ολόκληρο τον πίνακα, χρησιμοποιήστε το @ σύμβολο ως το
δείκτης του ${array[index]}:
echo${fruits[@]}
Για να μάθετε τον αριθμό των στοιχείων στον πίνακα, χρησιμοποιήστε το # σύμβολο όπως φαίνεται παρακάτω:
echo ${#fruits[1]}
Μπορεί επίσης να χρειαστεί να τροποποιήσετε στοιχεία πίνακα—δείτε το παρακάτω παράδειγμα για το πώς να το κάνετε. Είναι παρόμοιο με το πώς προσθέτετε ένα νέο στοιχείο. Η μόνη διαφορά είναι ότι αντικαθιστάτε μια τιμή σε ένα ευρετήριο που έχει ήδη μια τιμή.
fruits[1]=pears
Συνειρμικοί πίνακες
Ένας πίνακας που έχει αυθαίρετες τιμές ως κλειδιά του ονομάζεται συσχετικός πίνακας. Αυτοί οι πίνακες χρησιμοποιούνται για την αποθήκευση σχετικών ζευγών κλειδιού-τιμής.
Σχετίζεται με: Πώς να μετατρέψετε τα σενάρια Bash σε εφαρμογές με δυνατότητα κλικ χρησιμοποιώντας το AppleScript
Για να ορίσετε έναν συσχετιστικό πίνακα, πρέπει να το κάνετε ρητά χρησιμοποιώντας τη λέξη-κλειδί δηλώνω.
# associative array called animal
declare -A animal
animal[giraffe]=tall
animal[lion]=brave
animal[cheetah]=fast
Μπορείτε να αποκτήσετε πρόσβαση σε ένα στοιχείο μέλους με τον ίδιο τρόπο που κάνετε τους πίνακες με ευρετήριο:
echo${animal[lion]}
Εάν θέλετε να εκτυπώσετε όλες τις τιμές, μπορείτε να χρησιμοποιήσετε το @ σύμβολο όπως φαίνεται παρακάτω:
echo${animal[@]}
Εάν θέλετε να εκτυπώσετε όλα τα πλήκτρα πίνακα, μπορείτε να χρησιμοποιήσετε το @ και ! σύμβολα όπως φαίνεται παρακάτω:
echo${!animal[@]}
Για να βρείτε τον αριθμό των στοιχείων που έχει ο συσχετιστικός πίνακας, χρησιμοποιήστε την ίδια σύνταξη που θα χρησιμοποιούσατε με τους πίνακες με ευρετήριο (που επιδεικνύεται στην τελευταία ενότητα).
Εάν θέλετε να διαγράψετε ένα στοιχείο πίνακα ή ολόκληρο τον πίνακα, χρησιμοποιήστε την παρακάτω σύνταξη:
unset arrayName[Key] # delete array item
unset arrayName # delete entire array
Χρησιμοποιώντας την εντολή printf
Ίσως έχετε παρατηρήσει ότι ολόκληρο το άρθρο χρησιμοποιεί το ηχώ εντολή για έξοδο δεδομένων στο κέλυφος. ο ηχώ Η εντολή λειτουργεί για αυτό το σεμινάριο, αλλά έχει λίγες δυνατότητες και ευελιξία όσον αφορά τη μορφοποίηση συμβολοσειρών.
Ωστόσο, το printf Η εντολή προσφέρει πιο συγκεκριμένες επιλογές μορφοποίησης που κάνουν το σενάριο Bash παιχνιδάκι. Μαθαίνοντας το printf Η λειτουργία σίγουρα θα βελτιώσει την εμπειρία μορφοποίησης συμβολοσειρών και την αποτελεσματικότητά σας στο Bash.