GNU Info

Info Node: (autoconf.info)Assignments

(autoconf.info)Assignments


Next: Special Shell Variables Prev: Shell Substitutions Up: Portable Shell
Enter node , (file) or (file)node

Assignments
===========

   When setting several variables in a row, be aware that the order of
the evaluation is undefined.  For instance `foo=1 foo=2; echo $foo'
gives `1' with sh on Solaris, but `2' with Bash.  You must use `;' to
enforce the order: `foo=1; foo=2; echo $foo'.

   Don't rely on the exit status of an assignment: Ash 0.2 does not
change the status and propagates that of the last statement:

     $ false || foo=bar; echo $?
     1
     $ false || foo=`:`; echo $?
     0

and to make things even worse, QNX 4.25 just sets the exit status to 0
in any case:

     $ foo=`exit 1`; echo $?
     0

   To assign default values, follow this algorithm:

  1. If the default value is a literal and does not contain any closing
     brace, use:

          : ${var='my literal'}

  2. If the default value contains no closing brace, has to be
     expanded, and the variable being initialized will never be
     IFS-split (i.e., it's not a list), then use:

          : ${var="$default"}

  3. If the default value contains no closing brace, has to be
     expanded, and the variable being initialized will be IFS-split
     (i.e., it's a list), then use:

          var=${var="$default"}

  4. If the default value contains a closing brace, then use:

          test "${var+set}" = set || var='${indirection}'

   In most cases `var=${var="$default"}' is fine, but in case of doubt,
just use the latter.  Note: Shell Substitutions, items
`${VAR:-VALUE}' and `${VAR=VALUE}' for the rationale.


automatically generated by info2www version 1.2.2.9