Поиск по сайту:

Замена вложенных переменных и предопределенные переменные BASH в Linux. Часть 11


Две последние статьи о BASH Shell, в которых мы подробно обсуждали переменные, получили высокую оценку среди наших читателей. Мы, как Tecmint-Team, очень хотим предоставить вам новейшие, актуальные и актуальные темы, подробно освещенные. При этом мы всегда стараемся затронуть основные аспекты соответствующих тем.

Вот последняя статья о переменных Linux, в которой мы рассмотрим подстановку переменных и переменные, определенные в Shell, прежде чем закрыть эту тему.

Bash выполняет замену переменных до того, как команда действительно будет выполнена. Оболочка Linux Bash ищет все знаки «$» перед выполнением команды и заменяет их значением переменной. Процесс замены переменных Bash выполняется только один раз. Что если у нас есть вложенные переменные?

Примечание. Под вложенной переменной мы подразумеваем переменную, объявленную внутри переменной. Давайте посмотрим на описанный выше сценарий на примере ниже.

Объявите переменную, доступную только для чтения и исполняемую, как показано ниже.

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

Проверьте значение сохраненной переменной.

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

linux-console.net

Теперь объявите еще одну переменную, которая снова доступна только для чтения и является исполняемой.

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

Теперь ситуация такова, что мы определили две переменные.

«Linux_best_website», значение которого — «linux-console.net»
и «Linux_website», значение которого — «Linux_best_website».

Каким будет результат, если мы запустим приведенную ниже однострочную команду?

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

Сначала следует заменить переменную «$Linux_website» на значение «Linux_best_website», а затем «$Linux_best_website» снова станет переменной, значение которой равно то есть «linux-console.net». Таким образом, окончательный результат выполнения приведенной ниже команды должен быть таким.

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

linux-console.net

Но, к сожалению, это не та ситуация, мы получаем результат Linux_best_website.

Причина? Ага! Bash заменяет значение переменной только один раз. А как насчет сложных сценариев и программ, в которых нам нужно часто заменять переменные, а также заменять переменную более одного раза?

Здесь идет команда «eval», которая выполняет дополнительную работу по замене переменных более одного раза в скрипте. Вот пример, чтобы сделать всю работу прозрачной, как стекло.

Объявите переменную x, значение которой равно 10.

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

Проверьте значение переменной x, которую мы только что определили.

avi@localhost:~/Desktop$ echo $yx

x10

Объявите переменную y, значение которой равно x.

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

Проверьте значение переменной y, которую мы только что определили.

avi@localhost:~/Desktop$ echo $y 

x

Вот проблема однократной подстановки переменных BASH, которая не выполняет дополнительный раунд подстановки переменных. Чтобы исправить это, мы используем команду «eval».

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

Теперь проверьте значение переменной «y».

avi@localhost:~/Desktop$ echo $y 

10

Ура! Проблема была исправлена, и команда eval выиграла гонку :)

Не говоря уже о том, что команда «eval» очень полезна в больших программах-скриптах и является очень удобным инструментом.

Последняя, но не менее важная часть этого поста — это предопределенные переменные BASH. Нет! Не паникуйте, увидев этот список. Вам никогда не придется запоминать весь список, прежде чем приступить к написанию сценариев, за исключением нескольких. В рамках процесса обучения мы представляем список предопределенных переменных 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

Существует огромный список предопределенных переменных BASH. Мы постарались составить список наиболее часто используемых.

Это все на данный момент. Я буду здесь снова с еще одной интересной статьей. А до тех пор следите за обновлениями и подключайтесь к TecMint. Не забудьте оставить нам свой ценный отзыв в разделе комментариев ниже.