[U-Boot] set and test a local variable in a script

Wolfgang Denk wd at denx.de
Sat Nov 22 23:56:04 CET 2014


Dear Andreas,

In message <5470D48C.1080103 at gmx.at> you wrote:
> 
> i'm trying to set a local variable and test the variable in an 
> if-then-else script ...
> but it's somehow a bit weird!?

Not really weird; you just have to be a bit careful about quoting
rules...

> - set variable "nea" to 0
> - create a script "x" and run .... OK
> - modify variable "nea" to 1
> - run script "x" again ... NOK?!
> 
> ... what i'm doing wrong  -  the behavior is the same with 2013.10 and 
> 2014.01

...and it would be the same if you were testing with a regular shell on
the Linux command line.

Actually this is something I always recommend: if you see some strange
behaviour, first try to do the same in a standard shell environment,
and debug it there.


>  >U-Boot# nea=0
>  >U-Boot# setenv x "if itest 1 -eq $nea; then echo var1; else echo var0; 
> fi;"

It would have been a good idea here todo a "printenv x" to check what
was actually stored in the variable - this would have shown your
problem.  The thing is, you want to keep the '$nea' notation in the
variable, so you can evaluate the variable when you run that macro.
However, inside double quotes (") variable substitution takes place,
so above command is equivalent to

    setenv x "if itest 1 -eq 0; then echo var1; else echo var0; fi;"

>  >U-Boot# run x
>  >var0
>  >U-Boot# nea=1
>  >U-Boot# run x
>  >var0            <<<<<----- so now i should get the "var1" as a result
>  >U-Boot# echo $nea
>  >1
 
Use printenv to verify what is stored in the variable x, and you will
understand this.


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Today is the yesterday you worried about tomorrow.


More information about the U-Boot mailing list