Λειτουργικά συστήματα

Γνώση Υπολογιστών >> Λειτουργικά συστήματα >  >> Unix

Πώς χρησιμοποιείτε συστοιχίες στο UNIX;

Τα κελύφη Unix (όπως το Bash, το ZSH, το SH) δεν έχουν συστοιχίες με τον ίδιο τρόπο όπως οι γλώσσες υψηλότερου επιπέδου όπως η Python ή το C ++. Χειρίζονται συστοιχίες με λιγότερο δομημένο τρόπο, συνήθως χρησιμοποιώντας χορδές διαχωρισμένου με κενά ή ειδικές τεχνικές. Δείτε πώς μπορείτε να εργαστείτε με δομές που μοιάζουν με πίνακες σε διαφορετικά πλαίσια κελύφους UNIX:

1. Χορηγίες διαχωρισμένου με κενά:

Αυτή είναι η απλούστερη μέθοδος. Μπορείτε ουσιαστικά να αποθηκεύσετε στοιχεία ως ενιαία συμβολοσειρά, χωρισμένα από χώρους (ή άλλους οριοθέτες που επιλέγετε). Η πρόσβαση σε μεμονωμένα στοιχεία απαιτεί χειραγώγηση συμβολοσειρών.

`` `bash

my_array ="κεράσι μπανάνας μήλου"

Πρόσβαση στο πρώτο στοιχείο (υποθέτοντας τον διαχωρισμό χώρου):

first_element ="$ {my_array %% *}" #Removes τα πάντα από τον πρώτο χώρο και μετά.

echo "$ first_element" # έξοδος:Apple

Πρόσβαση στο δεύτερο στοιχείο:

Second_Element ="$ {my_array #*}" #Removes τα πάντα μέχρι τον πρώτο χώρο.

second_element ="$ {second_element %% *}" #Removes τα πάντα από τον πρώτο χώρο και μετά

echo "$ second_element" # έξοδος:μπανάνα

#ITERITION (λιγότερο αποτελεσματική):

για φρούτα στο $ my_array; κάνω

echo "$ fruit"

γινώμενος

`` `

Περιορισμοί: Αυτή η προσέγγιση είναι επιρρεπής σε σφάλματα εάν τα στοιχεία συστοιχίας περιέχουν χώρους.

2. Χρησιμοποιώντας συστοιχίες σε bash (και άλλα κελύφη με υποστήριξη συστοιχίας):

Το Bash (και κάποια άλλα σύγχρονα κελύφη) παρέχουν πιο ισχυρή υποστήριξη συστοιχίας.

`` `bash

Δηλώστε μια συστοιχία

my_array =("apple" "μπανάνα" "κεράσι")

Στοιχεία πρόσβασης:

echo "$ {my_array [0]}" # έξοδος:Apple

echo "$ {my_array [1]}" # έξοδος:μπανάνα

Λήψη του μήκους πίνακα:

echo "$ { # my_array [@]}" # έξοδος:3

Επαναφορά:

γιατί εγώ στο "$ {! my_array [@]}"; Κάντε #ITERATE μέσω δεικτών

echo "$ {my_array [i]}"

γινώμενος

ή επαναλάβετε απευθείας μέσω στοιχείων:

για φρούτα στο "$ {my_array [@]}"; κάνω

echo "$ fruit"

γινώμενος

#Προσθέστε στοιχεία:

my_array+=("ημερομηνία")

echo "$ {my_array [3]}" #output:Ημερομηνία

#Παρέχεται σε συστοιχία:

my_array+=(πορτοκαλί σταφυλιών)

#Στοιχεία (λιγότερο απλά, απαιτεί μετατόπιση):

Unset 'My_Array [1]' #Removes Element στο Index 1 (Banana)

#Σημείωση ότι οι δείκτες δεν μετατοπίζονται αυτόματα. Δεν υπάρχει ενσωματωμένη μετατόπιση μετά τη διαγραφή.

Εκτυπώστε τον τροποποιημένο πίνακα:

για φρούτα στο "$ {my_array [@]}"; κάνω

echo "$ fruit"

γινώμενος

`` `

Σημαντικές εκτιμήσεις:

* Αναφορά: Πάντα να παραθέτουμε μεταβλητές συστοιχίας (π.χ., `" $ {my_array [@]} "`) για να αποφευχθεί η διάσπαση των λέξεων και η σφαίρα, γεγονός που μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά. Αυτό είναι ιδιαίτερα κρίσιμο όταν τα στοιχεία συστοιχίας ενδέχεται να περιέχουν χώρους ή ειδικούς χαρακτήρες.

* Ευρετήριο 0: Οι συστοιχίες στο bash είναι 0-indexed, που σημαίνει ότι το πρώτο στοιχείο είναι στο δείκτη 0.

* Ειδικό κέλυφος: Η σύνταξη και τα διαθέσιμα χαρακτηριστικά για συστοιχίες ενδέχεται να διαφέρουν ελαφρώς ανάλογα με το συγκεκριμένο κέλυφος που χρησιμοποιείτε (bash, zsh, ksh κ.λπ.).

3. Χρήση εργαλείων γραμμής εντολών για λειτουργίες που μοιάζουν με πίνακες:

Για πιο πολύπλοκες χειρισμούς συστοιχίας (διαλογή, φιλτράρισμα κ.λπ.), θα το βρείτε συχνά πιο αποτελεσματικό για να χρησιμοποιήσετε εξωτερικές επιχειρήσεις κοινής ωφέλειας, όπως `awk`,` sed 'ή `sort'. Αυτά τα εργαλεία υπερέχουν στην επεξεργασία κειμένου, τα οποία μπορούν να προσαρμοστούν ώστε να λειτουργούν με δεδομένα δομημένα ως οριοθετημένες χορδές.

Για παράδειγμα, για να ταξινομήσετε τα στοιχεία μιας διαχωρισμένης συμβολοσειράς:

`` `bash

my_array ="κεράσι μπανάνας μήλου"

echo "$ my_array" | tr '' '\ n' | Ταξινόμηση | tr '\ n' ''

`` `

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα