On Mon, Nov 22, 2021 at 4:52 PM Wolfgang Denk <w...@denx.de> wrote: > > Dear Artem, > > In message > <CAKaHn9+yL3naiDqbsQJWQ0Po=g=tmjjcpskxkx5c4ay1m1a...@mail.gmail.com> you > wrote: > > > > > > > > next examples just demonstrate how its works for already defined env > > > > variables which contain other variables (like storred env variables) > > > > > > Which next examples? > > > > Usage examples (from commit message): > > > > => setenv a hello; setenv b world; setenv c '${a} ${b}' > > => setenv -r d '${c}! ${a}...' > > => printenv d > > d=hello world! hello... > > This is a very simple example, and I showed you how you can solve > this one by just omitting the apostrophes: > > => setenv a hello; setenv b world; setenv c ${a} ${b} > => setenv d ${c}! ${a}... > => printenv d > d=hello world! hello... >
sure i know it and its easy, but we still have some misunderstanding, and i will try explain again our problem our problem (TASK) we have: some env variables which already defined and we totally dont know about content ( for example its was improved by `env import` or loaded from env storage and "setenv a hello; setenv b world; setenv c '${a} ${b}'; setenv d '${c}! ${a}...' ;" just example how emulate this env state ) we need: setup/resolve env variable for example from d (and need resolve all sub included vars) => setenv -r e $d => printenv e => e=hello world! hello... please explain how we can get it without -r (deep resolve option) via standard way ? > > I _think_ what you actually have in mind is something like this: > > => setenv a hello > => setenv b world > => setenv c '${a} ${b}' > => setenv a goodbye > => setenv b sunshine > > something to set d to: '${c}! ${a}...' > > => printenv d > > Here my simple approach does not show what you want to have: > > => setenv a hello > => setenv b world > => setenv c ${a} ${b} > => setenv a goodbye > => setenv b sunshine > => setenv d ${c}! ${a}... > => printenv d > d=hello world! goodbye... > > That's because here evaluation takes place at assignment, but you > want it when used - but being recursive here is neither a good idea > nor standard. > > How would you do it in a standard posix shell? You would have to > use "eval", like that: > > $ a=hello > $ b=world > $ c='${a} ${b}' > $ a=goodbye > $ b=sunshine > $ d=$(eval echo $c) > $ echo $d > goodbye sunshine > > But please note that "eval" is _not_ recursive!! > > $ a='$b' > $ eval echo $c > $b sunshine > > And this is why I object against this patch. > > Oh, and in U-Boot you could write this as: > > => setenv a hello > => setenv b world > => setenv c '${a} ${b}' > => setenv a goodbye > => setenv b sunshine > => setenv foo "setenv d ${c}! ${a}..." > => run foo > => printenv d > d=goodbye sunshine! goodbye... > > And yes, here you have to be careful about using ' or " as there is > no recursion like you might expect. > > So yes, it would be nice if we had "eval" (which will ocme with the > hush update), and no, "eval" does not recurse either. > > > > Best regards, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de > Real computer scientists despise the idea of actual hardware. Hard- > ware has limitations, software doesn't. It's a real shame that Turing > machines are so poor at I/O.