restaurar - variables de entorno linux export
compruebe si la variable de entorno ya está configurada (4)
La solución estándar para asignar condicionalmente una variable (ya sea en el entorno o no) es:
: ${VAR=foo}
Eso establecerá VAR al valor "foo" solo si está desactivado.
Para establecer VAR en "foo" si VAR no está configurado o la cadena vacía, use:
: ${VAR:=foo}
Para poner VAR en el entorno, haga el seguimiento con:
export VAR
También puede export VAR=${VAR-foo}
o export VAR=${VAR:=foo}
, pero algunos shells antiguos no son compatibles con la sintaxis de la asignación y se exportan en la misma línea. Además, DRY ; usar el nombre en ambos lados del operador =
es una repetición innecesaria. (Una segunda línea que exporta la variable viola el mismo principio, pero se siente mejor).
Tenga en cuenta que, en general, es muy difícil determinar si una variable está en el entorno. El análisis del resultado de env
no funcionará. Considerar:
export foo=''
VAR=var-value''
env | grep VAR
Tampoco funciona para engendrar una subshell y probar:
sh -c ''echo $VAR''
Eso indicaría que el VAR está establecido en la subcapa, lo que sería un indicador de que VAR está en el entorno del proceso actual, pero puede ser simplemente que VAR esté configurado en la inicialización de la subcadena. Funcionalmente, sin embargo, el resultado es el mismo que si VAR está en el entorno. Afortunadamente, generalmente no te importa si VAR está en el medio ambiente o no. Si lo necesitas allí, ponlo allí. Si lo necesita, sáquelo.
Esta pregunta ya tiene una respuesta aquí:
Estoy escribiendo un script de shell, donde tengo que verificar si la variable de entorno está configurada; si no está configurada, entonces tengo que configurarla. ¿Hay alguna manera de verificar el script de shell, ya sea que una variable de entorno ya esté configurada o no?
Lo que quieres hacer es nativo en bash, se llama sustitución de parámetros:
VARIABLE="${VARIABLE:=abc}"
Si VARIABLE no está configurado, el lado derecho será igual a abc. Tenga en cuenta que el operador interno :=
puede reemplazarse por :-
que comprueba si VARIABLE no está configurado o vacío.
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
Quiero enfatizar que [ -z $VARIABLE ]
no es suficiente, porque puede tener VARIABLE
pero no fue exportado. Eso significa que no es una variable de entorno en absoluto.
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Esto verifica si la longitud de $ VARIABLE es cero.