Búsqueda de sitios web

Sustitución de variables anidadas y variables BASH predefinidas en Linux - Parte 11


Los dos últimos artículos sobre BASH Shell, donde analizamos las variables en detalle, fueron muy apreciados entre nuestros lectores. Nosotros, como Tecmint-Team, estamos muy interesados en brindarle los temas más recientes, actualizados y relevantes cubiertos en detalle. Además, siempre intentamos tocar las perspectivas más importantes de los temas correspondientes.

Aquí está el último artículo sobre Variables de Linux donde veremos la sustitución de variables y las variables definidas en Shell antes de cerrar este tema.

Bash realiza la sustitución de variables antes de que realmente se ejecute el comando. Linux Bash Shell busca todos los signos '$' antes de ejecutar el comando y lo reemplaza con el valor de la variable. El proceso de sustitución de variables Bash se realiza solo una vez. ¿Qué pasa si tenemos variables anidadas?

Nota: Por variable anidada nos referimos a la variable declarada dentro de la variable. Veamos el escenario anterior en el siguiente ejemplo.

Declare una variable que sea de solo lectura y ejecutable como se muestra a continuación.

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

Verifique el valor de la variable almacenada.

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

linux-console.net

Ahora declare otra variable que nuevamente es de solo lectura y ejecutable.

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

Ahora la situación es que hemos definido dos variables.

‘Linux_best_website’, cuyo valor es “linux-console.net ”
y 'Linux_website', cuyo valor es "Linux_best_website"

¿Cuál sería el resultado si ejecutamos el siguiente comando de una línea?

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

Primero debe reemplazar la variable '$Linux_website', con el valor “Linux_best_website” y luego “$Linux_best_website” es nuevamente una variable cuyo valor que es “linux-console.net”. Entonces, el resultado final de ejecutar el siguiente comando debería ser.

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

linux-console.net

Pero desafortunadamente, esta no es la situación, el resultado que obtenemos es Linux_best_website.

¿Razón? ¡Sí! Bash sustituye el valor de la variable solo una vez. ¿Qué pasa con los scripts y programas complejos en los que necesitamos sustituir variables con frecuencia y también debemos sustituir la variable más de una vez?

Aquí viene el comando 'eval' que realiza un trabajo adicional de sustitución de variables más de una vez en un script. A continuación se muestra un ejemplo para que todo el funcionamiento quede tan claro como el cristal.

Declare una variable x, cuyo valor sea 10.

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

Verifique el valor de la variable x, que acabamos de definir.

avi@localhost:~/Desktop$ echo $yx

x10

Declare una variable y, cuyo valor sea x.

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

Verifique el valor de la variable y, que acabamos de definir.

avi@localhost:~/Desktop$ echo $y 

x

Aquí está el problema de la sustitución de variables única de BASH, que no realiza una ronda adicional de sustitución de variables. Estamos usando el comando 'eval' para solucionar este problema.

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

Ahora verifique el valor de la variable 'y'.

avi@localhost:~/Desktop$ echo $y 

10

¡Hurra! El problema se solucionó y el comando 'eval' ganó la carrera :)

Sin mencionar que el comando 'eval' es muy útil en programas de script grandes y es una herramienta muy útil.

La última parte, pero no menos importante, de esta publicación son las variables predefinidas de BASH. ¡No! No entre en pánico al ver esta lista. Nunca necesitarás recordar toda la lista antes de empezar a escribir guiones, excepto algunos. Como parte del proceso de aprendizaje, presentamos la Lista de variables predefinidas de 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

Hay una lista enorme de variables BASH predefinidas. Hemos intentado producir una lista de los más utilizados.

Eso es todo por ahora. Estaré aquí nuevamente con otro artículo interesante. Hasta entonces, estad atentos y conectados a TecMint. No olvide brindarnos sus valiosos comentarios en la sección de comentarios a continuación.