bitbake: bitbake-user-manual: Updated the variable expansion section.

Fixes [YOCTO #9984]

Added more detail to the examples that show the effects of
variable expanison.

(Bitbake rev: 480096ca93c0a649ebfff68dfc7d9bbe8eb2ea2d)

Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Scott Rifenbark 2016-07-21 09:49:08 -07:00 committed by Richard Purdie
parent 2652217970
commit d1e3f0bb16
1 changed files with 31 additions and 12 deletions

View File

@ -50,22 +50,41 @@
<title>Variable Expansion</title>
<para>
BitBake supports variables referencing one another's
contents using a syntax that is similar to shell scripting.
Following is an example that results in <filename>A</filename>
containing "aval" and <filename>B</filename> evaluating to
"preavalpost" based on that current value of
<filename>A</filename>.
Variables can reference the contents of other variables
using a syntax that is similar to variable expansion in
Bourne shells.
The following assignments
result in A containing "aval" and B evaluating to "preavalpost".
<literallayout class='monospaced'>
A = "aval"
B = "pre${A}post"
</literallayout>
You should realize that whenever <filename>B</filename> is
referenced, its evaluation will depend on the state of
<filename>A</filename> at that time.
Thus, later evaluations of <filename>B</filename> in the
previous example could result in different values
depending on the value of <filename>A</filename>.
<note>
Unlike in Bourne shells, the curly braces are mandatory:
Only <filename>${FOO}</filename> and not
<filename>$FOO</filename> is recognized as an expansion of
<filename>FOO</filename>.
</note>
The "=" operator does not immediately expand variable
references in the right-hand side.
Instead, expansion is deferred until the variable assigned to
is actually used.
The result depends on the current values of the referenced
variables.
The following example should clarify this behavior:
<literallayout class='monospaced'>
A = "${B} baz"
B = "${C} bar"
C = "foo"
*At this point, ${A} equals "foo bar baz"*
C = "qux"
*At this point, ${A} equals "qux bar baz"*
B = "norf"
*At this point, ${A} equals "norf baz"*
</literallayout>
Contrast this behavior with the
<link linkend='immediate-variable-expansion'>immediate variable expansion</link>
operator (i.e. ":=").
</para>
</section>