Différence entre: et: = avec des variables dans les fichiers bash

1

Je suis tombé sur un fichier bash qui a quelque chose comme ça

MYVAR := SomeVal

Je sais qu'après avoir lu des tutoriels, vous définissez des valeurs en tant que telles

MYVAR = SomeVal

Quelle est la différence entre les deux ci-dessus?

MistyD
la source
1
Vous devez savoir que vous ne mettez pas d'espaces autour de l'opérateur d'affectation.
Krowe
Êtes-vous sûr que ce n'était pas un Makefile?
Michał Politowski

Réponses:

3

Vous avez probablement vu une extension de paramètre pour définir une valeur par défaut.

La différence est de savoir si la variable est non définie ou est définie avec une valeur null:

  1. quand la variable est non définie, il n'y a pas de différence

    $ unset MYVAR; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    SomeVal
    $ unset MYVAR; : ${MYVAR=SomeVal}; echo "$MYVAR"
    SomeVal
  2. quand la variable a une valeur, il n'y a pas de différence

    $ MYVAR="foo"; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    foo
    $ MYVAR="foo"; : ${MYVAR=SomeVal}; echo "$MYVAR"
    foo
  3. quand la variable a une valeur nulle:

    $ MYVAR=""; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    SomeVal
    $ MYVAR=""; : ${MYVAR=SomeVal}; echo "$MYVAR"
    # empty line
Glenn Jackman
la source