bashshell

Assigning default values to shell variables with a single command in bash


I have a whole bunch of tests on variables in a bash (3.00) shell script where if the variable is not set, then it assigns a default, e.g.:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi

I seem to recall there's some syntax to doing this in one line, something resembling a ternary operator, e.g.:

FOO=${ ${VARIABLE} : 'default' }

(though I know that won't work...)

Am I crazy, or does something like that exist?


Solution

  • Very close to what you posted, actually. You can use something called Bash parameter expansion to accomplish this.

    To get the assigned value, or default if it's missing:

    FOO="${VARIABLE:-default}"  # FOO will be assigned 'default' value if VARIABLE not set or null.
    # The value of VARIABLE remains untouched.
    

    To do the same, as well as assign default to VARIABLE:

    FOO="${VARIABLE:=default}"  # If VARIABLE not set or null, set its value to 'default'. 
    # Then that value will be assigned to FOO