Node:Assignments, Next:Special Shell Variables, Previous:Shell Substitutions, Up:Portable Shell
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:
: ${var='my literal'}
: ${var="$default"}
var=${var="$default"}
test "${var+set}" = set || var='${indirection}'
In most cases var=${var="$default"}
is fine, but in case of
doubt, just use the latter. See Shell Substitutions, items
${var:-value}
and ${var=value}
for the rationale.