Замена вложенных переменных и предопределенные переменные 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 | 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. Не забудьте оставить нам свой ценный отзыв в разделе комментариев ниже.