Today I was puzzled as I found out that the bash one-liner
A=foo echo $A
does not print 'foo'.
The answer came thanks to Vorlon and Wiggy:
A=foo echo sets A in the
environment of the echo command, and
echo $A passes the value of
the shell as an argument to echo.
$A is expanded before the line is run
and at that time
A=foo hasn't been processed yet.
One quick fix is doing
A=foo; echo $A, but this leaves A set to foo after
the execution of the command. To make it so that A is foo only when executing
echo, one can use parenthesis:
(A=foo ; echo $A):
$ (A=foo; echo $A); echo $A foo $
(note: the boring presence of "foo" in these examples should be taken as a reminder of my call for no-op words)