Sisäkkäisten muuttujien korvaaminen ja ennalta määritetyt BASH-muuttujat Linuxissa – Osa 11
Kaksi viimeistä artikkelia BASH Shellistä, joissa keskustelimme muuttujista yksityiskohtaisesti, arvostivat suuresti lukijoidemme keskuudessa. Me Tecmint-tiiminä haluamme tarjota sinulle viimeisimmät, ajantasaiset ja asiaankuuluvat aiheet, jotka on käsitelty yksityiskohtaisesti. Lisäksi pyrimme aina koskettamaan vastaavien aiheiden suuria näkökulmia.
Tässä on viimeinen artikkeli Linux-muuttujista, jossa aiomme nähdä muuttujien korvaamisen ja Shellissä määritetyt muuttujat ennen tämän aiheen sulkemista.
Bash suorittaa muuttujien korvaamisen ennen kuin komento todella suoritetaan. Linux Bash Shell etsii kaikki $-merkit ennen komennon suorittamista ja korvaa sen muuttujan arvolla. Bash-muuttujan korvausprosessi suoritetaan vain kerran. Entä jos meillä on sisäkkäisiä muuttujia?
Huomaa: sisäkkäisillä muuttujilla tarkoitamme muuttujan sisällä ilmoitettua muuttujaa. Katsotaanpa yllä olevaa skenaariota alla olevassa esimerkissä.
Ilmoita muuttuja, joka on vain luku - ja suoritettavissa alla olevan mukaisesti.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Tarkista tallennetun muuttujan arvo.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Ilmoita nyt toinen muuttuja, joka on jälleen vain luku - ja suoritettava.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
Nyt tilanne on, että olemme määrittäneet kaksi muuttujaa.
"Linux_best_website", jonka arvo on "linux-console.net"
ja "Linux_website", jonka arvo on "Linux_best_website"
Mikä olisi tulos, jos suoritamme alla olevan yksirivisen komennon?
avi@localhost:~$ printf "%s" "$Linux_website"
Sen pitäisi ensin korvata muuttuja "$Linux_website" arvolla "Linux_best_website", ja sitten "$Linux_best_website" on jälleen muuttuja, jonka arvo on joka on "linux-console.net". Joten alla olevan komennon suorittamisen lopullisen tuloksen pitäisi olla.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
Mutta valitettavasti tilanne ei ole tämä, vaan saamamme tulos on Linux_best_website.
Syy? Jep! Bash korvaa muuttujan arvon vain kerran. Entä monimutkaiset komentosarjat ja ohjelmat, joissa meidän on korvattava muuttujia usein sekä korvattava muuttuja useammin kuin kerran?
Tässä tulee komento eval, joka suorittaa lisätyötä muuttujien korvaamiseksi useammin kuin kerran skriptissä. Tässä on esimerkki, jotta koko toimisi yhtä kirkkaana kuin lasi.
Ilmoita muuttuja x, jonka arvo on 10.
avi@localhost:~/Desktop$ declare x=10
Tarkista juuri määrittämämme muuttujan x arvo.
avi@localhost:~/Desktop$ echo $yx
x10
Ilmoita muuttuja y, jonka arvo on x.
avi@localhost:~/Desktop$ declare y=x
Tarkista juuri määrittämämme muuttujan y arvo.
avi@localhost:~/Desktop$ echo $y
x
Tässä on BASH -kertamuuttujan vaihtamisen ongelma, joka ei suorita ylimääräistä muuttujan vaihtokierrosta. Käytämme eval-komentoa korjataksemme tämän.
avi@localhost:~/Desktop$ eval y=$x
Tarkista nyt muuttujan y arvo.
avi@localhost:~/Desktop$ echo $y
10
Hurraa! Ongelma korjattiin ja eval-komento voitti kilpailun :)
Puhumattakaan, eval-komento on erittäin hyödyllinen suurissa komentosarjaohjelmissa ja on erittäin kätevä työkalu.
Tämän viestin viimeinen mutta ei vähäisin osa on BASH-ennalta määritetyt muuttujat. Ei! Älä panikoi tätä listaa nähdessäsi. Sinun ei koskaan tarvitse muistaa koko luetteloa ennen kuin alat kirjoittaa skriptejä muutamaa lukuun ottamatta. Osana oppimisprosessia esittelemme BASH:n ennalta määritetyn muuttujan List.
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 |
Esimääritetyistä BASH-muuttujista on valtava luettelo. Olemme yrittäneet laatia luettelon useimmin käytetyistä.
Tässä kaikki tältä erää. Tulen tänne jälleen yhden mielenkiintoisen artikkelin kanssa. Pysy kuulolla siihen asti ja ole yhteydessä TecMintiin. Älä unohda antaa meille arvokasta palautetta alla olevassa kommenttiosassa.