Website-Suche

Verschachtelte Variablenersetzung und vordefinierte BASH-Variablen in Linux – Teil 11


Die letzten beiden Artikel über BASH Shell, in denen wir Variablen ausführlich besprochen haben, wurden von unseren Lesern sehr geschätzt. Wir als Tecmint-Team legen großen Wert darauf, Ihnen aktuelle, aktuelle und relevante Themen detailliert zu vermitteln. Darüber hinaus versuchen wir stets, wesentliche Perspektiven der entsprechenden Themen zu berühren.

Hier ist der letzte Artikel über Linux-Variablen, in dem wir uns die Variablenersetzung und die in Shell definierten Variablen ansehen, bevor wir dieses Thema schließen.

Bash führt eine Variablenersetzung durch, bevor der Befehl tatsächlich ausgeführt wird. Die Linux-Bash-Shell sucht vor der Ausführung des Befehls nach allen „$“-Zeichen und ersetzt sie durch den Wert der Variablen. Der Prozess der Bash-Variablensubstitution wird nur einmal durchgeführt. Was ist, wenn wir verschachtelte Variablen haben?

Hinweis: Mit verschachtelter Variable meinen wir eine innerhalb einer Variablen deklarierte Variable. Sehen wir uns das obige Szenario im folgenden Beispiel an.

Deklarieren Sie wie unten beschrieben eine Variable, die schreibgeschützt und ausführbar ist.

avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"

Überprüfen Sie den Wert der gespeicherten Variablen.

avi@localhost:~$ printf "%s" "$Linux_best_website" 

linux-console.net

Deklarieren Sie nun eine weitere Variable, die wiederum schreibgeschützt und ausführbar ist.

avi@localhost:~$ declare -rx Linux_website="Linux_best_website"

Nun ist die Situation so, dass wir zwei Variablen definiert haben.

„Linux_best_website“, dessen Wert „linux-console.net“ ist
und „Linux_website“, dessen Wert „Linux_best_website“ ist.

Was wäre das Ergebnis, wenn wir den folgenden einzeiligen Befehl ausführen würden?

avi@localhost:~$ printf "%s" "$Linux_website"

Es sollte zuerst die Variable „$Linux_website“ durch den Wert „Linux_best_website“ ersetzen und dann ist „$Linux_best_website“ wieder eine Variable mit dem Wert Das ist „linux-console.net“. Das Endergebnis der Ausführung des folgenden Befehls sollte also sein.

avi@localhost:~$ printf "%s" "$Linux_website" 

linux-console.net

Aber leider ist das nicht der Fall, die Ausgabe, die wir erhalten, ist Linux_best_website.

Grund? Jawohl! Bash ersetzt den Wert der Variablen nur einmal. Was ist mit komplexen Skripten und Programmen, bei denen wir Variablen häufig oder mehr als einmal ersetzen müssen?

Hier kommt der Befehl „eval“, der zusätzliche Arbeit der Variablenersetzung mehr als einmal in einem Skript ausführt. Hier ist ein Beispiel, um das Ganze glasklar zu machen.

Deklarieren Sie eine Variable x, deren Wert 10 ist.

avi@localhost:~/Desktop$ declare x=10

Überprüfen Sie den Wert der Variablen x, die wir gerade definiert haben.

avi@localhost:~/Desktop$ echo $yx

x10

Deklarieren Sie eine Variable y, deren Wert x ist.

avi@localhost:~/Desktop$ declare y=x

Überprüfen Sie den Wert der Variablen y, die wir gerade definiert haben.

avi@localhost:~/Desktop$ echo $y 

x

Hier liegt das Problem der einmaligen BASH-Variablensubstitution, die keine zusätzliche Runde der Variablensubstitution durchführt. Wir verwenden den Befehl „eval“, um dieses Problem zu beheben.

avi@localhost:~/Desktop$ eval y=$x

Überprüfen Sie nun den Wert der Variablen „y“.

avi@localhost:~/Desktop$ echo $y 

10

Hurra! Das Problem wurde behoben und der Befehl „eval“ hat das Rennen gewonnen :)

Ganz zu schweigen davon, dass der Befehl „eval“ in großen Skriptprogrammen sehr hilfreich und ein sehr praktisches Werkzeug ist.

Der letzte, aber nicht unwichtigste Teil dieses Beitrags sind vordefinierte BASH-Variablen. NEIN! Keine Panik, wenn Sie diese Liste sehen. Mit Ausnahme einiger weniger müssen Sie sich nie die gesamte Liste merken, bevor Sie mit dem Schreiben von Skripten beginnen. Als Teil des Lernprozesses stellen wir die Liste der vordefinierten BASH-Variablen vor.

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

Es gibt eine riesige Liste vordefinierter BASH-Variablen. Wir haben versucht, eine Liste der am häufigsten verwendeten zu erstellen.

Das ist alles für den Moment. Ich melde mich wieder mit einem weiteren interessanten Artikel. Bleiben Sie bis dahin auf dem Laufenden und bleiben Sie mit TecMint in Verbindung. Vergessen Sie nicht, uns im Kommentarbereich unten Ihr wertvolles Feedback mitzuteilen.