Por ejemplo, si hago unexpansión de parámetros:
$ b=1
$ echo $b
1
¿Dónde se b
almacena internamente? Lo verifiqué y no es una variable de entorno porque no aparece en la lista printenv
. Estoy escribiendo mi propio shell para aprender Unix y utilicé una tabla hash para almacenar y recuperar variables como una "tabla de búsqueda de símbolos". ¿Es ese método un buen método o me sugeriría alguna otra forma?
Respuesta1
El shell que se ejecuta cuando inicia sesión para leer sus comandos y ejecutarlos mantiene todas las variables. Si ejecuta un segundo shell, tendrá su propia colección de variables. Puede ejecutar el set
comando para ver una lista de las variables. El set
comando se ejecuta dentro del shell en lugar de iniciar un nuevo proceso.
Las variables de entorno se mantienen en un espacio separado o se marcan como tales (si es importante, lea el código fuente del shell) para que se transmitan a los programas que ejecuta el shell.
Usar dos tablas hash me parece razonable.
Respuesta2
Es sólo una variable durante la duración de la ejecución del programa. Otra forma de pensar en esto es reescribiendo su programa de la siguiente manera.
#!/bin/bash
b=1
echo $b
exit
Ahora, imagina que estás haciendo eso dentro de una terminal y luego sales de esa sesión de terminal. Abrir otra sesión de terminal no te mostrarácualquier cosasobre esa b=1
tarea en la sesión anterior.
Esto se denomina "variable local", a diferencia de "variable global". Se muestran, junto con muchas otras funciones, mediante set
.
Entonces, si quieres ver la tarea, hazlo.
set |grep '^b='
b=1
Por favor miraEl proyecto de documentación de Linuxpara más información.
Respuesta3
Las variables del Shell se almacenan en la memoria del Shell en ejecución. Utilice cualquier estructura de datos que le permita buscar fácilmente un elemento por su nombre; una tabla hash es una buena opción.
La diferencia entre las variables de shell y las variables de entorno es que las variables de entorno se colocan en el entorno de los subprocesos. Todas las variables de entorno son variables de shell. La forma natural de almacenarlos es crear una tabla hash que asigne los nombres de las variables no a un valor, sino a una estructura que contiene un valor y algunas banderas (exportadas, de solo lectura,…).