Zamjena ugniježđene varijable i unaprijed definirane BASH varijable u Linuxu - 11. dio
Posljednja dva članka o BASH Shell-u, gdje smo detaljno raspravljali o varijablama, bili su visoko cijenjeni među našim čitaocima. Mi kao Tecmint-Team želimo vam pružiti najnovije, ažurne i relevantne teme koje su detaljno pokrivene. Štaviše, uvek pokušavamo da dotaknemo glavne perspektive odgovarajućih tema.
Evo posljednjeg članka o Linux varijablama gdje ćemo vidjeti zamjenu varijabli i varijable definirane u Shell-u prije zatvaranja ove teme.
Bash izvodi zamjenu varijable prije nego što se naredba stvarno izvrši. Linux Bash Shell traži sve znake '$' prije izvršavanja naredbe i zamjenjuje ih vrijednošću varijable. Proces zamjene Bash varijable se izvodi samo jednom. Šta ako imamo ugniježđene varijable?
Napomena: Pod ugniježđenom promjenljivom podrazumijevamo varijablu deklariranu unutar varijable. Pogledajmo gornji scenario u primjeru ispod.
Deklarirajte varijablu koja je samo za čitanje i izvršna kao u nastavku.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Provjerite vrijednost pohranjene varijable.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Sada deklarirajte drugu varijablu koja je opet samo za čitanje i izvršna.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
Sada je situacija takva da smo definisali dvije varijable.
‘Linux_best_website’, čija je vrijednost “linux-console.net”
i "Linux_website", čija je vrijednost "Linux_best_website"
Šta bi bio rezultat ako bismo pokrenuli donju naredbu u jednom redu?
avi@localhost:~$ printf "%s" "$Linux_website"
Prvo treba zamijeniti varijablu '$Linux_website', sa vrijednošću “Linux_best_website ”, a zatim je “$Linux_best_website” opet varijabla vrijednosti što je “linux-console.net”. Dakle, konačni izlaz pokretanja donje naredbe trebao bi biti.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
Ali nažalost, ovo nije situacija, rezultat koji dobijamo je Linux_best_website.
Razlog? Da! Bash zamjenjuje vrijednost varijable samo jednom. Šta je sa složenim skriptama i programima u kojima moramo često zamjenjivati varijable, kao i više puta?
Ovdje dolazi naredba ‘eval’ koja obavlja dodatni posao zamjene varijabli više puta u skripti. Evo primjera kako bi cijeli rad bio čist kao staklo.
Deklarirajte varijablu x, čija je vrijednost 10.
avi@localhost:~/Desktop$ declare x=10
Provjerite vrijednost varijable x, koju smo upravo definirali.
avi@localhost:~/Desktop$ echo $yx
x10
Deklarirajte varijablu y, čija je vrijednost x.
avi@localhost:~/Desktop$ declare y=x
Provjerite vrijednost varijable y, koju smo upravo definirali.
avi@localhost:~/Desktop$ echo $y
x
Ovdje je problem BASH jednokratne zamjene varijable, koja ne izvodi dodatni krug zamjene varijable. Koristimo naredbu 'eval' da popravimo ovo.
avi@localhost:~/Desktop$ eval y=$x
Sada provjerite vrijednost varijable 'y'.
avi@localhost:~/Desktop$ echo $y
10
Ura! Problem je riješen i komanda 'eval' je pobijedila u utrci :)
Da ne spominjemo, naredba „eval“ je od velike pomoći u velikim skriptnim programima i vrlo je zgodan alat.
Posljednji, ali ne i najvažniji dio ovog posta su BASH unaprijed definirane varijable. Ne! Nemojte paničariti kada vidite ovu listu. Nikada ne morate zapamtiti cijelu listu prije nego počnete pisati skripte osim nekoliko. Kao dio procesa učenja, predstavljamo BASH predefiniranu listu varijabli.
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 |
Postoji ogromna lista unapred definisanih BASH varijable. Pokušali smo napraviti listu najčešće korištenih.
To je sve za sada. Opet ću biti ovdje sa još jednim zanimljivim člankom. Do tada ostanite sa nama i povezani na TecMint. Ne zaboravite nam dati svoje vrijedne povratne informacije u odjeljku za komentare ispod.