Οι μεταβλητές είναι ένας χώρος για να κρατάς δεδομένα. Η bash έχει δύο είδη δεδομένων: συμβολοσειρές και πίνακες. Θα μιλήσουμε για τους πίνακες αργότερα.
Εκχωρείς μια μεταβλητή ως εξής
name="value"
Σημαντικό: δεν πρέπει να υπάρχει κανένα κενό γύρω από το σύμβολο ίσον!
Όταν υπάρχουν κενά, όπως σε αυτό το παράδειγμα,
x = 10
η bash θα καλέσει την εντολή x με τα δύο ορίσματα = και 10!
Οι μεταβλητές μπορούν επίσης να ονομαστούν παράμετροι. Οι δύο όροι θα χρησιμοποιούνται εναλλάξ σε αυτό το κείμενο.
Μερικές σημαντικές παράμετροι που χρησιμοποιεί ή ορίζει η bash είναι:
PATH -- μια λίστα καταλόγων χωρισμένων με άνω τελεία, που χρησιμοποιείται για την εύρεση εξωτερικών εντολών.IFS -- ο "εσωτερικός διαχωριστής πεδίων".
Θα δούμε πώς χρησιμοποιείται παρακάτω.PWD -- ο τρέχων κατάλογος εργασίας σου.
Θα έχει την ίδια τιμή με την έξοδο της εντολής pwd.RANDOM -- ένας ψευδοτυχαίος ακέραιος μεταξύ 0 και 32767.BASH_VERSION -- η συμβολοσειρά έκδοσης της τρέχουσας παρουσίας της bash.Ένα όνομα μεταβλητής αποτελείται από κεφαλαία γράμματα, πεζά γράμματα, αριθμούς και κάτω παύλα. Δεν μπορεί να ξεκινά με αριθμό.
Παίρνεις την τιμή μιας παραμέτρου με τη σύνταξη $varname.
x=10
echo "The value of x is $x"
Για να μην μπερδεύεται το όνομα της μεταβλητής με το κείμενο γύρω του, μπορείς να κλείσεις το όνομα της μεταβλητής σε άγκιστρα.
Για παράδειγμα, για να εκτυπώσεις τη συμβολοσειρά 10x10
echo "${x}x$x"
# or
echo "${x}x${x}"
Κάποιοι οδηγοί στυλ προτείνουν να χρησιμοποιείς άγκιστρα στις περισσότερες περιπτώσεις, για αναγνωσιμότητα ή/και συνέπεια.
Όπως συζητήσαμε στην ενότητα Εντολές και ορίσματα, οι εντολές μπορούν να δέχονται ορίσματα. Τα σενάρια bash δεν αποτελούν εξαίρεση. Τα ορίσματα της τρέχουσας παρουσίας της bash ονομάζονται παράμετροι θέσης. Μπορείς να τα ανακτήσεις με αυτές τις ειδικές παραμέτρους:
$1 -- η πρώτη παράμετρος θέσης$2 ... $9 -- οι επόμενες παράμετροι${10} ... -- τα διψήφια απαιτούν άγκιστρα.$0 -- το όνομα του τρέχοντος σεναρίου.Τα ορίσματα μιας συνάρτησης του κελύφους είναι επίσης παράμετροι θέσης, και αντιμετωπίζονται ακριβώς έτσι. Θα δούμε περισσότερα για τις συναρτήσεις σε επόμενη ενότητα.
Υπάρχουν μερικές ειδικές παράμετροι που σε βοηθούν να δουλέψεις με τις παραμέτρους θέσης.
$# επεκτείνεται στον αριθμό των παραμέτρων θέσης."$@" επεκτείνεται στη λίστα όλων των παραμέτρων θέσης, καθεμιά ως ξεχωριστή λέξη."$*" επεκτείνεται σε μία μόνο συμβολοσειρά με όλες τις παραμέτρους θέσης ενωμένες μεταξύ τους με έναν χαρακτήρα.
$IFS, που από προεπιλογή είναι ένα κενό.Το "$@" είναι ο ασφαλέστερος τρόπος να περάσεις παραμέτρους θέσης σε μια άλλη εντολή κρατώντας τις σωστά μέσα σε εισαγωγικά.
Είναι επίσης αυτό που θα χρησιμοποιήσεις για να κάνεις βρόχο πάνω από τις παραμέτρους θέσης:
for arg in "$@"; do
do_something_with "$arg"
done
Στην πράξη, το "$@" χρησιμοποιείται πιο συχνά από το "$*".
Μια πολύ συχνή λειτουργία που θα κάνεις σε σενάρια bash είναι να συλλαμβάνεις την έξοδο μιας εντολής και να την αποθηκεύεις σε μια μεταβλητή. Για να το κάνεις αυτό, θα χρησιμοποιήσεις την αντικατάσταση εντολής.
var=$(command)
Για παράδειγμα, για να μετατρέψεις μια συμβολοσειρά σε κεφαλαία, μπορείς να κάνεις αυτό:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
Η bash έχει πολλούς ενσωματωμένους μηχανισμούς για να χειρίζεσαι μεταβλητές και συμβολοσειρές, ώστε να μη χρειάζεται να καλέσεις εξωτερικές εντολές.
Μετατροπή κειμένου σε κεφαλαία.
Στην προηγούμενη ενότητα έδειξα πώς να χρησιμοποιήσεις το tr για να μετατρέψεις κάποιο κείμενο σε κεφαλαία.
Για να το κάνεις στην bash:
echo "${text^^}"
Αντίστοιχα, το ${text,,} μετατρέπει την τιμή σε πεζά.
Δώσε μια προεπιλεγμένη τιμή αν η μεταβλητή είναι κενή.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Αναζήτηση και αντικατάσταση.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Υπάρχουν πολλές άλλες ενδιαφέρουσες επεκτάσεις παραμέτρων: εξαγωγή υποσυμβολοσειράς, εύρεση του μήκους της συμβολοσειράς, εκχώρηση μιας προεπιλεγμένης τιμής, αφαίρεση κειμένου από την αρχή ή το τέλος της τιμής, και άλλα. Διάβασε γι' αυτές στο εγχειρίδιο.