¿Cómo comprobar si existe una variable de entorno y obtener su valor? [duplicar]
Estoy escribiendo un script de shell. En este script de shell, tengo una variable que toma un valor predeterminado o el valor de una variable de entorno. Sin embargo, la variable de entorno no tiene por qué estar presente.
Por ejemplo, supongamos que antes de ejecutar el script, realizo la siguiente operación:
export DEPLOY_ENV=dev
¿Cómo le digo al script que busque esta variable de entorno y almacene su valor en una variable dentro del script? Además, ¿cómo le digo al script que si esta variable de entorno no existe, almacene una variable predeterminada?
[ -z "${DEPLOY_ENV}" ]
comprueba si DEPLOY_ENV
tiene una longitud igual a cero. Entonces podrías ejecutar:
if [[ -z "${DEPLOY_ENV}" ]]; then
MY_SCRIPT_VARIABLE="Some default value because DEPLOY_ENV is undefined"
else
MY_SCRIPT_VARIABLE="${DEPLOY_ENV}"
fi
# or using a short-hand version
[[ -z "${DEPLOY_ENV}" ]] && MyVar='default' || MyVar="${DEPLOY_ENV}"
# or even shorter use
MyVar="${DEPLOY_ENV:-default_value}"
Podrías simplemente usar la expansión de parámetros :
${parámetro:-palabra}
Si el parámetro no está establecido o es nulo, se sustituye la expansión de la palabra . De lo contrario, se sustituye el valor del parámetro .
Entonces prueba esto:
var=${DEPLOY_ENV:-default_value}
También existe la forma ${parameter-word} , que sustituye el valor predeterminado sólo cuando el parámetro no está configurado (pero no cuando es nulo).
Para demostrar la diferencia entre los dos:
$ unset DEPLOY_ENV
$ echo "'${DEPLOY_ENV:-default_value}' '${DEPLOY_ENV-default_value}'"
'default_value' 'default_value'
$ DEPLOY_ENV=
$ echo "'${DEPLOY_ENV:-default_value}' '${DEPLOY_ENV-default_value}'"
'default_value' ''
Si no le importa la diferencia entre una variable no configurada o una variable con un valor vacío, puede usar la expansión del parámetro de valor predeterminado:
foo=${DEPLOY_ENV:-default}
Si te importa la diferencia, deja los dos puntos.
foo=${DEPLOY_ENV-default}
También puede utilizar el -v
operador para probar explícitamente si un parámetro está configurado.
if [[ ! -v DEPLOY_ENV ]]; then
echo "DEPLOY_ENV is not set"
elif [[ -z "$DEPLOY_ENV" ]]; then
echo "DEPLOY_ENV is set to the empty string"
else
echo "DEPLOY_ENV has the value: $DEPLOY_ENV"
fi