Sto scrivendo uno script di shell. In questo script di shell, ho una variabile che prende un valore di default o il valore di una variabile d'ambiente. Tuttavia, la variabile d'ambiente non deve essere presente.
Per esempio, supponiamo che, prima di eseguire lo script, io esegua la seguente operazione:
export DEPLOY_ENV=dev
Come faccio a dire allo script di cercare questa variabile d'ambiente, e memorizzare il suo valore in una variabile all'interno dello script. Inoltre, come faccio a dire allo script che se questa variabile d'ambiente non esiste, memorizza una variabile di default?
[ -z "${DEPLOY_ENV}" ]
controlla se DEPLOY_ENV
ha lunghezza uguale a zero. Quindi si potrebbe eseguire:
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}"
Si potrebbe semplicemente usare espansione dei parametri:
${parametro:-parola}
Se parametro non è impostato o è nullo, viene sostituita l'espansione di parola. Altrimenti, viene sostituito il valore di parametro.
Quindi provate questo:
var=${DEPLOY_ENV:-default_value}
C'è anche la forma ${parametro-parola}, che sostituisce il valore di default solo quando parametro non è impostato (ma non quando è nullo).
Per dimostrare la differenza tra i due:
$ 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' ''
Non c'è differenza tra variabili d'ambiente e variabili in uno script. Le variabili d'ambiente sono solo definite prima, fuori dallo script, prima che lo script sia chiamato. Dal punto di vista dello script, una variabile è una variabile.
Potete controllare se una variabile è definita:
if [ -z "$a" ]
then
echo "not defined"
else
echo "defined"
fi
e poi impostare un valore predefinito per le variabili non definite o fare qualcos'altro.
La -z
controlla per una stringa di lunghezza zero (cioè vuota). Vedere man bash
e cercare la sezione CONDITIONAL EXPRESSIONS.
Puoi anche usare set -u
all'inizio del tuo script per farlo fallire una volta che incontra una variabile non definita, se vuoi evitare che una variabile non definita rompa le cose in modo creativo.