Wyszukiwanie w witrynie

Zagnieżdżone podstawienie zmiennych i predefiniowane zmienne BASH w systemie Linux — część 11


Ostatnie dwa artykuły na temat powłoki BASH, w których szczegółowo omówiliśmy zmienne, spotkały się z dużym uznaniem wśród naszych czytelników. Jako Tecmint-Team bardzo pragniemy zapewnić Państwu najnowsze, aktualne i istotne tematy omówione szczegółowo. Co więcej, zawsze staramy się poruszyć główne perspektywy odpowiednich tematów.

Oto ostatni artykuł na temat zmiennych w systemie Linux, w którym przed zamknięciem tego tematu zobaczymy podstawienia zmiennych i zmienne zdefiniowane w powłoce.

Bash dokonuje podstawienia zmiennych przed faktycznym wykonaniem polecenia. Linux Bash Shell wyszukuje cały znak „$” przed wykonaniem polecenia i zastępuje go wartością zmiennej. Proces podstawienia zmiennej Bash jest wykonywany tylko raz. A co jeśli mamy zagnieżdżone zmienne?

Uwaga: Przez zmienną zagnieżdżoną mamy na myśli zmienną zadeklarowaną wewnątrz zmiennej. Zobaczmy powyższy scenariusz w poniższym przykładzie.

Zadeklaruj zmienną, która jest tylko do odczytu i wykonywalna, jak poniżej.

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

Sprawdź wartość zapisanej zmiennej.

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

linux-console.net

Teraz zadeklaruj kolejną zmienną, która ponownie jest tylko do odczytu i wykonywalna.

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

Sytuacja jest taka, że zdefiniowaliśmy dwie zmienne.

„Linux_best_website”, której wartość to „linux-console.net”
oraz „Linux_website”, której wartość to „Linux_best_website”

Jaki byłby wynik, jeśli uruchomilibyśmy poniższe jednowierszowe polecenie?

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

Należy najpierw zastąpić zmienną „$Linux_website” wartością „Linux_best_web> ”, a następnie „$Linux_best_website” jest ponownie zmienną o wartości czyli „linux-console.net”. Zatem końcowy wynik uruchomienia poniższego polecenia powinien być.

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

linux-console.net

Ale niestety tak nie jest, wynik, który otrzymujemy, to Linux_best_website.

Powód? Tak! Bash podstawia wartość zmiennej tylko raz. A co ze złożonymi skryptami i programami, w których musimy często podstawiać zmienne, a także wielokrotnie podstawiać zmienne?

Oto polecenie „eval”, które wykonuje w skrypcie dodatkową pracę polegającą na podstawieniu zmiennych więcej niż raz. Oto przykład, aby całość była przejrzysta jak szkło.

Zadeklaruj zmienną x, której wartość wynosi 10.

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

Sprawdź wartość zmiennej x, którą właśnie zdefiniowaliśmy.

avi@localhost:~/Desktop$ echo $yx

x10

Zadeklaruj zmienną y, której wartość wynosi x.

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

Sprawdź wartość zmiennej y, którą właśnie zdefiniowaliśmy.

avi@localhost:~/Desktop$ echo $y 

x

Oto problem jednorazowego podstawienia zmiennej BASH, który nie powoduje dodatkowej rundy podstawienia zmiennych. Aby to naprawić, używamy polecenia „eval”.

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

Teraz sprawdź wartość zmiennej „y”.

avi@localhost:~/Desktop$ echo $y 

10

Hurra! Problem został rozwiązany, a polecenie „eval” wygrało wyścig :)

Nie wspominając już o tym, że polecenie „eval” jest bardzo pomocne w dużych programach skryptowych i jest bardzo przydatnym narzędziem.

Ostatnią, ale nie najmniej ważną częścią tego posta są predefiniowane zmienne BASH. NIE! Nie wpadaj w panikę, widząc tę listę. Nigdy nie musisz pamiętać całej listy przed rozpoczęciem pisania skryptów, z wyjątkiem kilku. W ramach procesu uczenia się prezentujemy predefiniowaną Listę zmiennych BASH.

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

Istnieje ogromna lista predefiniowanych zmiennych BASH. Staraliśmy się stworzyć listę najczęściej używanych.

To wszystko na teraz. Wrócę tu ponownie z kolejnym ciekawym artykułem. Do tego czasu bądź na bieżąco i połącz się z TecMint. Nie zapomnij podzielić się z nami swoją cenną opinią w sekcji komentarzy poniżej.