J'écris un script Shell, où je dois vérifier si la variable d'environnement est définie, sinon définie, je dois la définir. Existe-t-il un moyen de vérifier dans le script Shell, si une variable d'environnement est déjà définie ou non?
[ -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
Je tiens à souligner que [ -z $VARIABLE ]
ne suffit pas, car vous pouvez avoir VARIABLE
mais il n'a pas été exporté. Cela signifie que ce n'est pas du tout une variable d'environnement.
La solution standard pour affecter conditionnellement une variable (que ce soit dans l'environnement ou non) est:
: ${VAR=foo}
Cela mettra VAR à la valeur "foo" uniquement s'il n'est pas défini.
Pour définir VAR sur "foo" si VAR n'est pas défini ou la chaîne vide, utilisez:
: ${VAR:=foo}
Pour mettre VAR dans l'environnement, suivez avec:
export VAR
Vous pouvez également faire export VAR=${VAR-foo}
ou export VAR=${VAR:=foo}
, mais certains shells plus anciens ne prennent pas en charge la syntaxe d'affectation et d'exportation sur la même ligne. SEC ; en utilisant le nom des deux côtés du =
L'opérateur est une répétition inutile. (Une deuxième ligne exportant la variable viole le même principe, mais se sent mieux.)
Notez qu'il est très difficile en général de déterminer si une variable se trouve dans l'environnement. L'analyse de la sortie de env
ne fonctionnera pas. Considérer:
export foo='
VAR=var-value'
env | grep VAR
Cela ne fonctionne pas non plus pour générer un sous-shell et tester:
sh -c 'echo $VAR'
Cela indiquerait que le VAR est défini dans le sous-shell, ce qui serait un indicateur que le VAR est dans l'environnement du processus actuel, mais il se peut simplement que le VAR soit défini lors de l'initialisation du sous-shell. Fonctionnellement, cependant, le résultat est le même que si VAR se trouve dans l'environnement. Heureusement, vous ne vous souciez généralement pas si VAR est dans l'environnement ou non. Si vous en avez besoin là-bas, mettez-le là. Si vous en avez besoin, sortez-le.
Ce que vous voulez faire est natif en bash, cela s'appelle la substitution de paramètres:
VARIABLE="${VARIABLE:=abc}"
Si VARIABLE n'est pas défini, le côté droit sera égal à abc. Notez que l'opérateur interne :=
peut être remplacé par :-
qui teste si VARIABLE n'est pas défini ou vide.
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Ceci vérifie si la longueur de $ VARIABLE est nulle.