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