Όπως οι περισσότερες γλώσσες προγραμματισμού, τα σενάρια bash μερικές φορές χρειάζεται να αντιμετωπίσουν μια λίστα σχετικών τιμών. Η απλούστερη μορφή είναι ο τυπικός πίνακας.
Στο bash, ο προγραμματισμός συστοιχιών είναι αρκετά διαφορετικός, ιδιαίτερα όταν πρόκειται για σύνταξη. Οι συστοιχίες Bash είναι επίσης αυστηρά μονοδιάστατες, αλλά εξακολουθούν να έχουν πολλές χρήσεις.
Η Βασική Σύνταξη των Πίνακες Bash
Η δημιουργία ενός πίνακα στο bash είναι απλή. Μπορείτε να αρχικοποιήσετε έναν ολόκληρο πίνακα χρησιμοποιώντας αγκύλες, για παράδειγμα:
πόλη=(Λονδίνο Παρίσι Μιλάνο "Νέα Υόρκη")
(Μπορείτε να βρείτε όλο τον κώδικα από αυτό το παράδειγμα πόλης αυτό το GitHub Gist.)
Αυτό δημιουργεί έναν πίνακα που περιέχει τέσσερα στοιχεία, με ευρετήριο από το 0 έως το 3. Σημειώστε ότι η τέταρτη τιμή είναι μια συμβολοσειρά σε εισαγωγικά που αποτελείται από δύο λέξεις. Θα χρειαστεί να αναφέρετε τιμές που περιέχουν κενά για να διευκρινίσετε ότι δεν είναι ξεχωριστές τιμές.
Μπορείτε να αποκτήσετε πρόσβαση σε ένα μόνο στοιχείο χρησιμοποιώντας τη σύνταξη αγκύλης που είναι κοινή σε όλες τις γλώσσες προγραμματισμού:
πόλη[2]
Δεδομένου ότι αυτό είναι bash, θα χρειαστείτε μερικές βελτιώσεις για να χρησιμοποιήσετε πραγματικά την τιμή σε μια έκφραση:
- Θα χρειαστεί να προσαρτήσετε το σύμβολο του δολαρίου ($) στο όνομα της μεταβλητής.
- Θα χρειαστεί επίσης να χρησιμοποιήσετε τιράντες ({}) για να κάνετε το όνομα της μεταβλητής μονοσήμαντο. Από προεπιλογή, το bash θα θεραπεύσει $city[2] ως μεταβλητή που ονομάζεται πόλη. Προσθέστε άγκιστρα για να πείτε στο bash να αξιολογήσει επίσης τις αγκύλες και τον αριθμό ευρετηρίου.
Η τυπική σύνταξη πρόσβασης σε πίνακα bash είναι τότε:
${variable_name[index]}
Ακολουθεί ένα πλήρες παράδειγμα:
#!/bin/bash
πόλη=(Λονδίνο Παρίσι Μιλάνο "Νέα Υόρκη")
ηχώ ${πόλη[3]}
# Νέα Υόρκη
Αντί να αρχικοποιήσετε έναν πίνακα ταυτόχρονα, μπορείτε να τον αντιστοιχίσετε βήμα-βήμα. Αυτό το σενάριο είναι μεγαλύτερο αντίστοιχο του προηγούμενου παραδείγματος:
#!/bin/bash
πόλη[0]=Λονδίνο
πόλη[1]=Παρίσι
πόλη[2]=Μιλάνο
πόλη[3]="Νέα Υόρκη"
ηχώ ${πόλη[3]}
# Νέα Υόρκη
Σημειώστε ότι, σε κάθε περίπτωση, πρέπει να προσέχετε να μην προσθέσετε κενό χώρο γύρω από το σύμβολο ίσον. Το "πόλη[0] = Λονδίνο", με κενά γύρω από το σύμβολο ίσον, θα δημιουργήσει ένα σφάλμα.
Περισσότερες χρήσεις για πίνακες Bash
Οι πίνακες είναι ιδανικοί για την αποθήκευση σχετικών δεδομένων. Ακολουθεί ένα (πολύ περιορισμένο) σενάριο φλοιού για να λάβετε την τετραγωνική ρίζα ενός αριθμού:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
ηχώ ${sqrt[$1]}
Σημειώστε ότι το σενάριο χρησιμοποιεί την τιμή $1 ως δείκτης πίνακα. $1 αντιπροσωπεύει το πρώτο όρισμα γραμμής εντολών που λαμβάνει το σενάριο, ώστε να μπορείτε να εκτελέσετε αυτό το σενάριο ως εξής:
$ ./sqrt.sh 9
3
Μπορεί να γνωρίζετε το $(cmd) σύνταξη για την εκτέλεση μιας εντολής και την αποθήκευση της εξόδου της σε μια μεταβλητή. Μπορείτε να το συνδυάσετε με τη σύνταξη αρχικοποίησης πίνακα για να δουλέψετε έναν πίνακα αρχείων:
arr=( $(ls) )
Ένας πίνακας είναι συχνά μια τέλεια δομή δεδομένων για επανάληψη και ο Bash δεν αποτελεί εξαίρεση. Μπορείτε να κάνετε βρόχο μέσω ενός πίνακα για να εκτυπώσετε κάθε στοιχείο ή να εκτελέσετε μια λειτουργία σε κάθε μέλος.
Μπορείτε να απευθυνθείτε σε έναν πίνακα ένα Για.. σε βρόχος, για να επαναλάβετε το περιεχόμενό του. Για παράδειγμα, εδώ είναι ένας απλός βρόχος που εκτυπώνει τον αριθμό των γραμμών σε κάθε αρχείο του πίνακα αρ:
για αρχείο στο "${arr[@]}"; κάνω
wc -l "$file"
Έγινε
# 3 envvars
# 547 httpd.conf
# ...
Σημειώστε ότι αυτό το μοτίβο χρησιμοποιεί το @ σύμβολο για την ανάκτηση όλων των στοιχείων από τον πίνακα.
Περισσότερη σύνταξη του πίνακα Bash
Μπορείτε να λάβετε τον αριθμό των στοιχείων σε έναν πίνακα χρησιμοποιώντας τα ακόλουθα:
ηχώ ${#city[@]}
# 4
Μπορείτε να προσθέσετε ένα νέο στοιχείο στο τέλος ενός τυπικού πίνακα όπως:
arr+=(4)
Για να προσθέσετε λοιπόν μια πέμπτη πόλη στη λίστα:
πόλη+=(Ρώμη)
ηχώ ${πόλη[@]}
# Λονδίνο Παρίσι Μιλάνο Νέα Υόρκη Ρώμη
Για να εξαγάγετε ένα κομμάτι ενός πίνακα, μπορείτε να χρησιμοποιήσετε μια σύνταξη που προσεγγίζει τη λειτουργία slice πολλών άλλων γλωσσών:
${arr[@]:s: n}
Αυτή η σύνταξη θα επιστρέψει ένα κομμάτι του πίνακα που ξεκινά από τη θέση μικρό και περιέχει n είδη. Μπορείτε να παραλείψετε το :n μέρος για να εξαγάγετε όλα τα στοιχεία από μικρό μέχρι το τέλος της λίστας.
echo ${city[@]:2:2}
# Μιλάνο Νέα Υόρκη
echo ${city[@]:3}
# Νέα Υόρκη Ρώμη
Το Bash έχει πολλά χαρακτηριστικά, απλά παίρνουν λίγη μάθηση
Οι πίνακες στο bash μπορεί να έχουν περιορισμούς, αλλά προσφέρουν την ίδια βασική λειτουργικότητα με τις περισσότερες γλώσσες προγραμματισμού. Αν και το bash έχει υποστηρίξει ιστορικά απλούς μονοδιάστατους πίνακες, οι καιροί αλλάζουν. Η τελευταία έκδοση του bash, 4, υποστηρίζει συσχετιστικούς πίνακες και ευρετηρίαση αρνητικών πινάκων.
Όποια έκδοση του bash και αν χρησιμοποιείτε, είναι σημαντικό να κατανοήσετε τις αποχρώσεις του. Ακόμη και η κανονική σύνταξη μεταβλητών έχει πολλές ιδιοσυγκρασίες.
Επεξήγηση μεταβλητών Bash: Ένας απλός οδηγός με παραδείγματα
Διαβάστε Επόμενο
Σχετικά θέματα
- Προγραμματισμός
- Linux
- Προγραμματισμός
- Linux Bash Shell
- Σενάριο
Σχετικά με τον Συγγραφέα

Ο Bobby είναι ένας λάτρης της τεχνολογίας που εργάστηκε ως προγραμματιστής λογισμικού για περισσότερες από δύο δεκαετίες. Στο MUO, είναι ο Junior Editor για την ενότητα Προγραμματισμός. Είναι παθιασμένος με τα παιχνίδια, εργάζεται ως αρχισυντάκτης στο Switch Player Magazine και ασχολείται με όλες τις πτυχές της διαδικτυακής δημοσίευσης και της ανάπτυξης ιστού.
Εγγραφείτε στο ενημερωτικό μας δελτίο
Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Κάντε κλικ εδώ για να εγγραφείτε