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 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

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.