¿Cómo comprobar si existe una variable de entorno y obtener su valor? [duplicar]

Resuelto Nicolas El Khoury asked hace 8 años • 5 respuestas

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?

Nicolas El Khoury avatar Sep 02 '16 22:09 Nicolas El Khoury
Aceptado

[ -z "${DEPLOY_ENV}" ]comprueba si DEPLOY_ENVtiene 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}"
endurogizer avatar Sep 02 '2016 16:09 endurogizer

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' ''
Eugene Yarmash avatar Sep 02 '2016 16:09 Eugene Yarmash

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 -voperador 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
chepner avatar Sep 02 '2016 16:09 chepner