Beágyazott változók helyettesítése és előre definiált BASH-változók Linuxban – 11. rész
A BASH Shellről szóló utolsó két cikk, ahol részletesen tárgyaltuk a változókat, nagyra értékelték olvasóink. Mi, mint Tecmint-Team, nagyon szívesen nyújtunk Önnek legfrissebb, naprakész és releváns témákat, amelyek részletesen lefedve vannak. Sőt, mindig igyekszünk megérinteni a megfelelő témák főbb szempontjait.
Itt található az utolsó cikk a Linux változókról, ahol a változók helyettesítését és a Shellben definiált változókat fogjuk látni a témakör bezárása előtt.
A Bash a parancs tényleges végrehajtása előtt végrehajtja a változók helyettesítését. A Linux Bash Shell a parancs végrehajtása előtt megkeresi az összes „$” jelet, és lecseréli a változó értékére. A Bash Variable behelyettesítését csak egyszer hajtják végre. Mi van, ha beágyazott változóink vannak?
Megjegyzés: Beágyazott változó alatt a változón belül deklarált változót értjük. Lássuk a fenti forgatókönyvet az alábbi példában.
Deklaráljon egy változót, amely csak olvasható és végrehajtható az alábbiak szerint.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Ellenőrizze a tárolt változó értékét.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Most deklaráljon egy másik változót, amely ismét csak olvasható és végrehajtható.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
A helyzet most az, hogy két változót definiáltunk.
„Linux_best_website”, amelynek értéke „linux-console.net ”
és a „Linux_website”, amelynek értéke „Linux_best_website”
Mi lenne az eredmény, ha az alábbi egysoros parancsot futtatnánk?
avi@localhost:~$ printf "%s" "$Linux_website"
Először le kell cserélnie a „$Linux_website” változót „Linux_best_website” értékre, majd a „$Linux_best_website” ismét egy változó, amelynek értéke amely a „linux-console.net”. Tehát az alábbi parancs futtatásának végső kimenete legyen.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
De sajnos nem ez a helyzet, a kimenet a Linux_best_website.
Ok? Aha! A Bash csak egyszer helyettesíti a változó értékét. Mi a helyzet az összetett szkriptekkel és programokkal, ahol gyakran kell helyettesítenünk a változókat, és többször is be kell cserélnünk a változókat?
Itt jön az 'eval' parancs, amely egy szkriptben többször is végrehajt további változó-helyettesítési munkát. Íme egy példa, hogy az egész olyan tiszta legyen, mint az üveg.
Deklaráljon egy x változót, amelynek értéke 10.
avi@localhost:~/Desktop$ declare x=10
Ellenőrizze az imént definiált x változó értékét.
avi@localhost:~/Desktop$ echo $yx
x10
Deklaráljon egy y változót, amelynek értéke x.
avi@localhost:~/Desktop$ declare y=x
Ellenőrizze az imént definiált y változó értékét.
avi@localhost:~/Desktop$ echo $y
x
Itt van a BASH egyszeri változóhelyettesítés problémája, amely nem hajt végre további változók behelyettesítését. Az 'eval' parancsot használjuk ennek javítására.
avi@localhost:~/Desktop$ eval y=$x
Most ellenőrizze az „y” változó értékét.
avi@localhost:~/Desktop$ echo $y
10
Hurrá! A hibát javítottuk, és az ’eval’ parancs nyerte a versenyt :)
Arról nem is beszélve, hogy az 'eval' parancs nagyon hasznos a nagy script programokban, és nagyon praktikus eszköz.
A bejegyzés utolsó, de nem utolsó része a BASH előre definiált változói. Nem! Ne essen pánikba a lista láttán. Soha nem kell emlékeznie a teljes listára, mielőtt elkezdi írni a szkripteket, kivéve néhányat. A tanulási folyamat részeként bemutatjuk a BASH előre definiált List változót.
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 | 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 |
Az előre definiált BASH-változók hatalmas listája van. Megpróbáltuk összeállítani a leggyakrabban használt listát.
Ez minden most. Ismét itt leszek egy másik érdekes cikkel. Addig is maradjon velünk, és csatlakozzon a TecMinthez. Ne felejtse el megadni nekünk értékes visszajelzését az alábbi megjegyzés részben.