Αντικατάσταση ένθετης μεταβλητής και προκαθορισμένες μεταβλητές BASH στο Linux - Μέρος 11


Τα δύο τελευταία άρθρα για το BASH Shell, όπου συζητήσαμε λεπτομερώς τις μεταβλητές, εκτιμήθηκαν ιδιαίτερα από τους αναγνώστες μας. Εμείς ως Tecmint-Team επιθυμούμε πολύ να σας παρέχουμε πιο πρόσφατα, ενημερωμένα και σχετικά θέματα που καλύπτονται λεπτομερώς. Επιπλέον προσπαθούμε πάντα να αγγίζουμε τις κύριες προοπτικές των αντίστοιχων θεμάτων.

Εδώ είναι το τελευταίο άρθρο για τις μεταβλητές Linux όπου θα δούμε την αντικατάσταση μεταβλητών και τις μεταβλητές που ορίζονται στο Shell πριν κλείσουμε αυτό το θέμα.

Το Bash εκτελεί αντικατάσταση μεταβλητής πριν εκτελεστεί πραγματικά η εντολή. Το Linux Bash Shell αναζητά όλο το σύμβολο «$» πριν εκτελέσει την εντολή και το αντικαθιστά με την τιμή της μεταβλητής. Η διαδικασία αντικατάστασης της μεταβλητής Bash εκτελείται μόνο μία φορά. Τι γίνεται αν έχουμε ένθετες μεταβλητές;

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

Δηλώστε μια μεταβλητή που είναι μόνο για ανάγνωση και εκτελέσιμη όπως παρακάτω.

avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"

Ελέγξτε την τιμή της αποθηκευμένης μεταβλητής.

avi@localhost:~$ printf "%s" "$Linux_best_website" 

linux-console.net

Τώρα δηλώστε μια άλλη μεταβλητή που είναι και πάλι μόνο για ανάγνωση και εκτελέσιμη.

avi@localhost:~$ declare -rx Linux_website="Linux_best_website"

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

"Linux_best_website", η τιμή του οποίου είναι "linux-console.net "
και, "Linux_website", η τιμή του οποίου είναι "Linux_best_website"

Ποιο θα ήταν το αποτέλεσμα, αν εκτελούσαμε την παρακάτω εντολή μιας γραμμής;

avi@localhost:~$ printf "%s" "$Linux_website"

Θα πρέπει πρώτα να αντικαταστήσει τη μεταβλητή '$Linux_website', με την τιμή "Linux_best_website " και μετά το "$Linux_best_website " είναι και πάλι μια μεταβλητή η τιμή του που είναι "linux-console.net". Έτσι το τελικό αποτέλεσμα της εκτέλεσης της παρακάτω εντολής θα πρέπει να είναι.

avi@localhost:~$ printf "%s" "$Linux_website" 

linux-console.net

Αλλά δυστυχώς, δεν είναι αυτή η κατάσταση, το αποτέλεσμα που λαμβάνουμε είναι Linux_best_website.

Λόγος? Ναι! Το Bash αντικαθιστά την τιμή της μεταβλητής μόνο μία φορά. Τι γίνεται με τα πολύπλοκα σενάρια και τα προγράμματα όπου πρέπει να αντικαθιστούμε συχνά μεταβλητές καθώς και να αντικαθιστούμε τη μεταβλητή περισσότερες από μία φορές;

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

Δηλώστε μια μεταβλητή x, η τιμή της οποίας είναι 10.

avi@localhost:~/Desktop$ declare x=10

Ελέγξτε την τιμή της μεταβλητής x, που μόλις καθορίσαμε.

avi@localhost:~/Desktop$ echo $yx

x10

Δηλώστε μια μεταβλητή y, η τιμή της οποίας είναι x.

avi@localhost:~/Desktop$ declare y=x

Ελέγξτε την τιμή της μεταβλητής y, που μόλις καθορίσαμε.

avi@localhost:~/Desktop$ echo $y 

x

Εδώ είναι το πρόβλημα της αντικατάστασης μιας μεταβλητής BASH, η οποία δεν εκτελεί επιπλέον γύρο αντικατάστασης μεταβλητής. Χρησιμοποιούμε την εντολή "eval" για να το διορθώσουμε.

avi@localhost:~/Desktop$ eval y=$x

Τώρα ελέγξτε την Τιμή της μεταβλητής «y».

avi@localhost:~/Desktop$ echo $y 

10

Ζήτω! Το πρόβλημα διορθώθηκε και η εντολή ‘eval’ κέρδισε τον αγώνα :)

Για να μην αναφέρουμε, η εντολή ‘eval’ είναι πολύ χρήσιμη σε μεγάλα προγράμματα σεναρίων και είναι ένα πολύ εύχρηστο εργαλείο.

Το τελευταίο αλλά όχι λιγότερο σημαντικό μέρος αυτής της ανάρτησης είναι οι προκαθορισμένες μεταβλητές BASH. Οχι! Μην πανικοβληθείτε βλέποντας αυτήν τη λίστα. Δεν χρειάζεται ποτέ να θυμάστε ολόκληρη τη λίστα πριν ξεκινήσετε να γράφετε σενάρια εκτός από μερικά. Ως μέρος της μαθησιακής διαδικασίας, παρουσιάζουμε την προκαθορισμένη λίστα μεταβλητών BASH.

No. BASH VARIABLE RESULT
1 auto_resume Process command completion for the stopped jobs.
2 BASH PATH of the shell.
3 BASH_ENV Shows the name of the profile file
4 BASH_VERSION Shows the version of Bash
5 BASH_VERSINFO Shows Detailed version information.
6 BASH_VERSINFO[0] The major version number (the release).
7 BASH_VERSINFO[1] The minor version number (the version).
8 BASH_VERSINFO[2] The patch level.
9 BASH_VERSINFO[3] The build version.
10 BASH_VERSINFO[4] The release status (for example, beta1 ).
11 BASH_VERSINFO[5] The value of MACHTYPE .
12 CDPATH List of directories separated by colon.
13 COLUMNS Number of Characters per line on Standard Output.
14 EUID User ID of the current user.
15 FCEDIT The default text editor for the fc command.
16 FUNCNAME The name of the fun
17 GROUPS Groups of which the user is a Member.
18 HISTFILE The file containing the command history.
19 HOME The name of your home directory.
20 LINES Number of horizontal lines on Standard Output.
21 MAIL Name of a file to check for incoming mail
22 OSTYPE Name of the operating system.
23 OLDPWD The previous working directory
24 PWD The current working directory
25 RANDOM Prints a random number
26 SHELL The preferred shell to use
27 TIMEFORMAT The format for the time command.
28 UID The ID of the current user

Υπάρχει μια τεράστια λίστα με προκαθορισμένες μεταβλητές BASH. Προσπαθήσαμε να δημιουργήσουμε μια λίστα με τα πιο συχνά χρησιμοποιούμενα.

Αυτα για τωρα. Θα είμαι ξανά εδώ με ένα άλλο ενδιαφέρον άρθρο. Μέχρι τότε, μείνετε συντονισμένοι και συνδεδεμένοι στο TecMint. Μην ξεχάσετε να μας δώσετε τα πολύτιμα σχόλιά σας στην παρακάτω ενότητα σχολίων.