Substituição de variáveis aninhadas e variáveis BASH predefinidas no Linux - Parte 11
Os dois últimos artigos sobre BASH Shell, onde discutimos as variáveis em detalhes, foram muito apreciados por nossos leitores. Nós, como Equipe Tecmint, estamos muito interessados em fornecer a você os tópicos mais recentes, atualizados e relevantes, abordados em detalhes. Além disso, tentamos sempre abordar as principais perspectivas dos tópicos correspondentes.
Aqui está o último artigo sobre Variáveis Linux onde veremos a substituição de variáveis e variáveis definidas no Shell antes de fechar este tópico.
Bash realiza a substituição de variáveis antes que o comando seja realmente executado. O Linux Bash Shell procura todos os sinais ‘$’ antes de executar o comando e substitui-os pelo valor da variável. O processo de substituição da variável Bash é realizado apenas uma vez. E se tivermos variáveis aninhadas?
Nota: Por variável aninhada queremos dizer variável declarada dentro da variável. Vamos ver o cenário acima no exemplo abaixo.
Declare uma variável que seja somente leitura e executável conforme abaixo.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Verifique o valor da variável armazenada.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Agora declare outra variável que novamente é somente leitura e executável.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
Agora a situação é que definimos duas variáveis.
‘Linux_best_website’, cujo valor é “linux-console.net ”
e, ‘Linux_website’, cujo valor é “Linux_best_website”
Qual seria o resultado se executarmos o comando de uma linha abaixo?
avi@localhost:~$ printf "%s" "$Linux_website"
Deve primeiro substituir a variável '$Linux_website', pelo valor “Linux_best_website ” e então “$Linux_best_website ” é novamente uma variável com o valor de que é “linux-console.net ”. Portanto, o resultado final da execução do comando abaixo deve ser.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
Mas, infelizmente, esta não é a situação, o resultado que estamos obtendo é Linux_best_website.
Razão? Sim! Bash substitui o valor da variável apenas uma vez. E quanto a scripts e programas complexos em que precisamos substituir variáveis com frequência e também precisamos substituir a variável mais de uma vez?
Aí vem o comando ‘eval‘ que realiza trabalho adicional de substituição de variáveis mais de uma vez em um script. Aqui está um exemplo para tornar todo o funcionamento tão claro quanto vidro.
Declare uma variável x, cujo valor é 10.
avi@localhost:~/Desktop$ declare x=10
Verifique o valor da variável x, que acabamos de definir.
avi@localhost:~/Desktop$ echo $yx
x10
Declare uma variável y, cujo valor é x.
avi@localhost:~/Desktop$ declare y=x
Verifique o valor da variável y, que acabamos de definir.
avi@localhost:~/Desktop$ echo $y
x
Aqui está o problema da substituição única de variável BASH, que não realiza uma rodada extra de substituição de variável. Estamos usando o comando ‘eval’ para corrigir isso.
avi@localhost:~/Desktop$ eval y=$x
Agora verifique o valor da variável ‘y‘.
avi@localhost:~/Desktop$ echo $y
10
Viva! O problema foi corrigido e o comando ‘eval’ venceu a corrida :)
Sem mencionar que o comando ‘eval’ é muito útil em grandes programas de script e é uma ferramenta muito útil.
A última, mas não menos importante, parte deste post são as variáveis predefinidas do BASH. Não! Não entre em pânico ao ver esta lista. Você nunca precisa se lembrar de toda a lista antes de começar a escrever scripts, exceto alguns. Como parte do processo de aprendizagem, apresentamos a lista de variáveis predefinidas do 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 |
Há uma lista enorme de variáveis BASH predefinidas. Tentamos produzir uma lista dos mais usados.
É tudo por agora. Estarei aqui novamente com outro artigo interessante. Até então fique ligado e conectado ao TecMint. Não se esqueça de nos fornecer seus valiosos comentários na seção de comentários abaixo.