Copyright (C) 2000-2012 |
GNU Info (autoconf.info)AssignmentsAssignments =========== 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 |