Pesquisa de site

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 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

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.