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

hi,
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!?
- 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
U-Boot# nea=0 U-Boot# setenv x "if itest 1 -eq $nea; 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
U-Boot# setenv x "if itest 1 -eq $nea; then echo var1; else echo var0;
fi;"
U-Boot# run x var1 <<<<<------- after i set the script "x" again it's
working ... ?!
br & thx for any hint, Andy

Dear Andreas,
In message 5470D48C.1080103@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

hi,
many, many, many thx for your quick response ... now it works, and i know why it hasn't :)
br, Andy
On 22.11.2014 23:56, Wolfgang Denk wrote:
Dear Andreas,
In message 5470D48C.1080103@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

Dear Andreas,
In message 547211BA.7080603@gmx.at you wrote:
many, many, many thx for your quick response ... now it works, and i know why it hasn't :)
I'm glad I was able to help.
Best regards,
Wolfgang Denk
participants (2)
-
Andreas Neubacher
-
Wolfgang Denk