I came across a bash file which has something like this

MYVAR := SomeVal

I know after reading some tutorials you set values as such

MYVAR = SomeVal

What is the difference between the above two ?

  • 1
    You should know that you don't put a spaces around the assignment operator.
    – krowe
    Mar 19, 2015 at 23:08
  • Are you sure it wasn't a Makefile? Mar 20, 2015 at 5:57

1 Answer 1


You probably saw a parameter expansion to set a default value.

The difference is whether the variable is unset or it is set with a null value:

  1. when the variable is unset, there's no difference

    $ unset MYVAR; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    $ unset MYVAR; : ${MYVAR=SomeVal}; echo "$MYVAR"
  2. when the variable has a value, there's no difference

    $ MYVAR="foo"; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    $ MYVAR="foo"; : ${MYVAR=SomeVal}; echo "$MYVAR"
  3. when the variable has null value:

    $ MYVAR=""; : ${MYVAR:=SomeVal}; echo "$MYVAR"
    $ MYVAR=""; : ${MYVAR=SomeVal}; echo "$MYVAR"
    # empty line

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .