Nestet variabelsubstitusjon og forhåndsdefinerte BASH-variabler i Linux - del 11
De to siste artiklene om BASH Shell, hvor vi diskuterte variabler i detalj, ble satt stor pris på blant våre lesere. Vi som Tecmint-Team er veldig opptatt av å gi deg siste, oppdaterte og relevante emner som dekkes i detalj. Dessuten prøver vi alltid å berøre store perspektiver av de tilsvarende emnene.
Her er den siste artikkelen om Linux-variabler der vi skal se variabelerstatning og variabler definert i Shell før vi avslutter dette emnet.
Bash utfører variabel substitusjon før kommandoen virkelig blir utført. Linux Bash Shell søker etter alle '$'-tegnet før den utfører kommandoen og erstatter den med verdien av variabel. Prosessen med Bash Variable-substitusjon utføres bare én gang. Hva om vi har nestede variabler?
Merk: Med nestet variabel mener vi variabel erklært inne i variabelen. La oss se scenarioet ovenfor i eksemplet nedenfor.
Deklarer en variabel som er skrivebeskyttet og kjørbar som nedenfor.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Sjekk verdien til variabel som er lagret.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Deklarer nå en annen variabel som igjen er skrivebeskyttet og kjørbar.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
Nå er situasjonen at vi har definert to variabler.
‘Linux_best_website’, hvis verdi er “linux-console.net”
og «Linux_website», hvis verdi er «Linux_best_website»
Hva ville være resultatet hvis vi kjører kommandoen under én linje?
avi@localhost:~$ printf "%s" "$Linux_website"
Den bør først erstatte variabelen '$Linux_website', med verdien «Linux_best_website» og deretter «$Linux_best_website» er igjen en variabel verdien av som er «linux-console.net». Så den endelige utgangen av å kjøre kommandoen nedenfor bør være.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
Men dessverre er ikke dette situasjonen, resultatet vi får er Linux_best_website.
Grunnen til? Jepp! Bash erstatte verdien av variabel bare én gang. Hva med komplekse skript og programmer der vi trenger å erstatte variabler ofte, så vel som må erstatte variabelen mer enn én gang?
Her kommer kommandoen «eval» som utfører tilleggsarbeid med variabelsubstitusjon mer enn én gang i et skript. Her er et eksempel for å gjøre hele arbeidet så klart som glass.
Deklarer en variabel x, hvis verdi er 10.
avi@localhost:~/Desktop$ declare x=10
Sjekk verdien av variabel x, vi nettopp definerte.
avi@localhost:~/Desktop$ echo $yx
x10
Deklarer en variabel y, hvis verdi er x.
avi@localhost:~/Desktop$ declare y=x
Sjekk verdien av variabelen y, vi nettopp definerte.
avi@localhost:~/Desktop$ echo $y
x
Her er problemet med BASH engangsvariabelsubstitusjon, som ikke utfører en ekstra runde med variabelsubstitusjon. Vi bruker kommandoen «eval» for å fikse dette.
avi@localhost:~/Desktop$ eval y=$x
Sjekk nå verdien til variabelen 'y'.
avi@localhost:~/Desktop$ echo $y
10
Hurra! Problemet ble løst og kommandoen «eval» vant løpet :)
For ikke å nevne, 'eval'-kommandoen er veldig nyttig i store skriptprogrammer og er et veldig hendig verktøy.
Den siste, men ikke den minste delen av dette innlegget er BASH forhåndsdefinerte variabler. Nei! Ikke få panikk av å se denne listen. Du trenger aldri å huske hele listen før du begynner å skrive manus bortsett fra noen få. Som en del av læringsprosessen presenterer vi den forhåndsdefinerte BASH-variabellisten.
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 |
Det er en enorm liste over forhåndsdefinerte BASH-variabler. Vi har forsøkt å lage en liste over de mest brukte.
Det er alt for nå. Jeg vil være her igjen med en annen interessant artikkel. Inntil da, følg med og koble til TecMint. Ikke glem å gi oss din verdifulle tilbakemelding i kommentarfeltet nedenfor.